背景
为实现在Web
端通过PHP
调用Python
完成基于PaddleOCR
的文字识别并获取特定算法处理过的结果,真可谓踩了诸多大坑,经过前天的在PHP中调用Python并获取运行结果和昨天的Python运行多条shell并获取返回值记录,对于PHP
调用Python
和Python
调用PaddleOCR
的Shell
有了根本性的理论基础。
然而今天(昨天晚上)在Web
端通过PHP
调用Python
与Python
调用PaddleOCR
的Shell
结合时,网页无任何返回结果,查阅资料换成其他接口函数仍然出现各种bug
(网页就是不返回显示内容),随后一篇文章给了我尝试通过bat
批处理文件作为调用PHP
调用Python
的中间件然而还是无果。
随后将bat
文件的类型改为cmd
仍然无果,改为sh
并通过PHP
的system
函数调用则能实现PHP
调用Git Bash
客户端,但返回结果仅限于客户端且中文内容为纯乱码,并不像网上所说会自动返回结果到浏览器。
其间有PHP
命令字符串中的空格符号、PHP
项目执行路径、Python
中间件路径、绝对路径相对路径、文本编码等诸多变量需要控制,经过反复调试排查锁定问题的核心在于中间Python
程序切换路径的方法不正确(被程序调用执行不同于被控制台调用执行,使用cd
无效)。
解决
shell_exec
不适用,会返回空白,使用以下命令代替:
exec('python getnumber.py 001.png 2>&1', $out, $res);
dump($out);
遇到的下图所示问题:
通过:
# 切换目录到PaddleOCR运行目录
# cmd1 = "cd " + PPOCrPath # 被控制台调用
os.chdir(PPOCrPath) # 被PHP调用
即可得到正确的结果:
参考资料:
https://blog.csdn.net/weixin_31720623/article/details/115247694
https://www.fullstar.top/75.html
https://mrking00.github.io/2020/09/30/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%80%BB%E7%BB%93/
https://blog.csdn.net/qiulinwoaini/article/details/49786815
https://blog.csdn.net/weixin_27972919/article/details/115645995
https://cloud.tencent.com/developer/article/1534248
https://blog.csdn.net/baidu_19473529/article/details/83066783
版权属于:soarli
本文链接:https://blog.soarli.top/archives/611.html
转载时须注明出处及本声明。