本文介绍了安卓系统上的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不能读取二维码,但能读取条形码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!