Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于识别码功能的部分建议 #47

Closed
Byxs20 opened this issue Nov 5, 2023 · 9 comments
Closed

关于识别码功能的部分建议 #47

Byxs20 opened this issue Nov 5, 2023 · 9 comments

Comments

@Byxs20
Copy link
Contributor

Byxs20 commented Nov 5, 2023

问题:
dev 20231105 目前新版本就无法去识别binary的二维码,其实对于一般用户来说并不重要,但是还是希望软件能够更加强壮一些!

建议:
你好,给你提一个小小的建议就是关于二维码的方面,看你使用的库是pyzbar,这边有一个更好的替代库。
仓库地址:https:/zxing-cpp/zxing-cpp
Python调用demo:https:/zxing-cpp/zxing-cpp/blob/master/wrappers/python/README.md
在线测试网站:https://zxing-cpp.github.io/zxing-cpp/demo_reader.html

列举一些优点:
1.可以成功读取binary的二维码(对于您的软件目前的问题:可能你要想一下如何处理Binary类型的二维码,zxing-cpp是可以识别二维码的类型,所以您能够拥有判断依据,如果是binary类型有不可见字符时候可以输出16进制之类的)
2.可以成功读取无边框的二维码
3.比pyzbar能够更好的读取(有些时候二维码不放大一下,pyzbar就读取不到)
4.支持的码类型也不少,您可以查阅一下。

当然这个只是我个人的使用感觉,有时间您可以试试看,希望能够让该软件效果越来越好,望采纳!

@hiroi-sora
Copy link
Owner

感谢建议,这个库看起来确实不错。

简单试了一下,它的Release版本依赖 numpy 。有人提交了pr,去除numpy依赖,不过需要自己编译。等有空了再看看

Mask一下

https:/zxing-cpp/zxing-cpp/issues/283
https:/zxing-cpp/zxing-cpp/pull/615

@Byxs20
Copy link
Contributor Author

Byxs20 commented Nov 5, 2023

我十分喜爱作者的软件,这个功能其实对我来说可有可无我已经build了zixng-cpp的exe了,但是感觉这个库效果较好的,所以推荐一下!如果实现不复杂,期待作者您的更新!

@hiroi-sora
Copy link
Owner

我试着build了一下,没有成功,应该是我当前系统的gcc环境有点问题。

如果你有兴趣的话能否帮我build一下,目标版本 Python 3.8.10 Windows x64 。

https:/zxing-cpp/zxing-cpp/blob/master/wrappers/python/README.md

即用 python setup.py install 安装到自己python环境,然后将装好的包提取出来,测试一下能否在py嵌入式环境中使用(比如扔到UmiOCR-data/site-packages里,尝试import调用)。如果可以,发个压缩包上来

@Byxs20
Copy link
Contributor Author

Byxs20 commented Nov 6, 2023

我也没有build出来pyd文件,下面这个文件是我pip wheel zxing-cpp 得到的,所以还是依赖numpy,估计对您帮助估计不大

zxing_cpp-2.1.0-cp38-cp38-win_amd64.zip

我build的命令是在zxing-cpp目录中 python .\wrappers\python\setup.py install
image

如果我在 \zxing-cpp\wrappers\python 目录中去build的话,直接报错
image
找不到这个文件,然后我也不太会解决了

@Byxs20
Copy link
Contributor Author

Byxs20 commented Nov 6, 2023

搞好了,你去测试看看,现在已经不依赖numpy了!

zxingcpp.cp38-win_amd64.zip

image

@hiroi-sora
Copy link
Owner

hiroi-sora commented Nov 6, 2023

基本写完了,感兴趣的话 帮我测试下吧。

项目开发部署见 这里 ,很容易的。

二维码解析相关的代码在: QRcode.py#L41

同一文件的第74行有个 TODO ,因为我不熟悉非文本的二维码格式,所以是简单的转为base64。如果你有更好的做法欢迎PR

@Byxs20
Copy link
Contributor Author

Byxs20 commented Nov 6, 2023

1.测试了部分码:
image

2.其他码类型也能正常解析(代码我修复了,已经给您提交了pr):
image

pr链接:#50
这样使用base64的手段,我觉得也挺好的!

@DemonStarAlgol
Copy link

常用的包含非ASCII文本的QR码实际上都是Binary/Bytes模式,读取raw data后用UTF-8解码,很难想象一个能正常对应大部分日常QR码的解码器会不支持Binary mode,我想 @Byxs20 表达的意思是不是解码器无法直接输出raw data?这个对日常应用并没有太大必要,和正常的解码逻辑一起给出反而容易造成误解(比如会把正常的中文内容当成raw data解码出UTF-8编码的原始数据),建议可以作为非默认的选项供有需求的用户选择使用。

@hiroi-sora
Copy link
Owner

@DemonStarAlgol

把正常的中文内容当成raw data解码出UTF-8编码的原始数据

这个请放心,不会的。当前版本中,并不是以ASCII来判断文本,而是ZXing提供的content_type属性:

content_type <class 'zxingcpp.ContentType'>: ContentType.Text
    Binary <class 'zxingcpp.ContentType'>: ContentType.Binary
    GS1 <class 'zxingcpp.ContentType'>: ContentType.GS1
    ISO15434 <class 'zxingcpp.ContentType'>: ContentType.ISO15434
    Mixed <class 'zxingcpp.ContentType'>: ContentType.Mixed
    Text <class 'zxingcpp.ContentType'>: ContentType.Text
    UnknownECI <class 'zxingcpp.ContentType'>: ContentType.UnknownECI

故只要属性为 Text ,均以utf-8解码为文本内容,其它格式再尝试输出raw data。应该不会对普通用户造成误解。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants