hiroi-sora / Umi-OCR_v2

结束和新的开始
MIT License
915 stars 69 forks source link

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

Closed Byxs20 closed 6 months ago

Byxs20 commented 8 months ago

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

建议: 你好,给你提一个小小的建议就是关于二维码的方面,看你使用的库是pyzbar,这边有一个更好的替代库。 仓库地址:https://github.com/zxing-cpp/zxing-cpp Python调用demo:https://github.com/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 commented 8 months ago

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

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

Mask一下

https://github.com/zxing-cpp/zxing-cpp/issues/283
https://github.com/zxing-cpp/zxing-cpp/pull/615
Byxs20 commented 8 months ago

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

hiroi-sora commented 8 months ago

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

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

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

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

Byxs20 commented 8 months ago

我也没有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 commented 8 months ago

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

zxingcpp.cp38-win_amd64.zip

image

hiroi-sora commented 8 months ago

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

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

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

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

Byxs20 commented 8 months ago

1.测试了部分码: image

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

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

DemonStarAlgol commented 7 months ago

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

hiroi-sora commented 7 months ago

@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。应该不会对普通用户造成误解。