安卓系统上的PYZBAR不能读取二维码,但能读取条形码

Pyzbar on Android doesn#39;t read QRcodes, but reads barcodes(安卓系统上的PYZBAR不能读取二维码,但能读取条形码)

本文介绍了安卓系统上的PYZBAR不能读取二维码,但能读取条形码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在开发一个带有pyzbar的Kivy应用程序,可以在需要读取条形码和二维码的Android上运行。 该应用程序同时读取在我的PC上运行的条形码和二维码,但在使用由Buildozer构建的.apk时无法读取二维码,同时仍然能够有效地读取条形码。

我认为(就像它在PC上工作一样)在生成到apk时,问题出在.spec文件的依赖项中。

Buildozer.Spec要求:

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==2.0.0,sdl2,opencv,android,pyzbar,libzbar,Pillow,libiconv

代码运行一切都很顺利,但无论如何,我是这样调用pyzbar decode函数的:

import pyzbar
from pyzbar.pyzbar import decode

decoded_objects = decode(VideoCameraBC.image)

我试图定义ZbarSymbol,并且只针对二维码,但不出所料,它根本没有读取任何内容。

here和here中有两个类似(如果不是同一个问题)的问题,由于这两个问题都没有答案[28/01/2022],我再问一次。

.apk是在WSL2中的Buildozer中构建的,但已经尝试在Ubuntu中构建它,并且出现了同样的问题。

需要帮助。谢谢您

推荐答案

几天后,我终于找到了问题。 出于某些我不知道的原因,我的Android正在镜像图像(尽管应用程序中的图像非常好)。我正在获取Kivy源代码中的图像,并将其发送到一个函数。

    def on_tex(self, *l):
        image = np.frombuffer(self.texture.pixels, dtype='uint8')
        image = image.reshape(self.texture.height, self.texture.width, 4)
        numpy_data = image.tobytes()
        image = np.flipud(image) #This was necessary
        pil_image = Image.fromarray(image)

        self.texture.blit_buffer(numpy_data, bufferfmt="ubyte", colorfmt='rgba')
        self.canvas.ask_update()

        VideoCameraBC.new_image = True
        if(VideoCameraBC.BC_flag and VideoCameraBC.flag):
            VideoCameraBC.saving(self.texture.pixels, pil_image) #Here I was sending mirrored image


        VideoCameraID.new_image = True
        if(VideoCameraID.ID_flag and VideoCameraID.flag):
            VideoCameraID.saving(self.texture.pixels, pil_image) #Here I was sending mirrored image
条形码仍然可以正常读取,因为它们是一维的,并且镜像不会影响它们的数据。另一方面,二维码是二维的,需要处理。

这篇关于安卓系统上的PYZBAR不能读取二维码,但能读取条形码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:安卓系统上的PYZBAR不能读取二维码,但能读取条形码