标题: [文件操作] 求助批处理实现图片ocr归类 [打印本页]
作者: 暴牙弟 时间: 2023-6-6 21:49 标题: 求助批处理实现图片ocr归类
一堆001.jpg 002.jpg 003.jpg……
我用convert截取顶部 然后ocr识别导出tmp.txt
如果txt有银行二字,就截取底部指定位置,ocr识别出数字保存到tmp2.txt 并将这个数字新建文件夹,将被截取的图片放进去。
否则,否则就将图片直接放到上一个新建的文件夹中。- @echo off
- Setlocal enabledelayedexpansion
- FOR /D %%a IN (*) DO (
- echo %%~fa
- cd /d %%~fa
- for /r %%i in (*.jpg) do (
- convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
- tesseract "tmp.jpg" "tmp" -l chi_sim
- findstr /i "银行" "tmp.txt" >nul
- if errorlevel 1 (convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
- tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
- ping -n 2 127.0.0.1>nul
- set /P file=<"tmp2.txt"
- mkdir !file!
- move "%%i" !file!
- ) else ( set /P file=<"tmp2.txt"
- move "%%i" !file!)
- )
- )
- pause
复制代码
现在的问题是,就算tmp.txt没有"银行"二字,他也是会执行 else 之前的步骤。
作者: 77七 时间: 2023-6-6 22:37
可能是编码的问题造成的。
参考一下这个帖子 http://www.bathome.net/viewthread.php?tid=66267
作者: 暴牙弟 时间: 2023-6-6 23:03
回复 2# 77七
我用 &&goto A||goto B
根本不会正常运行。直接就是B
作者: 77七 时间: 2023-6-6 23:32
本帖最后由 77七 于 2023-6-6 23:45 编辑
回复 3# 暴牙弟
http://www.bathome.net/redirect.php?goto=findpost&;ptid=66267&pid=269641
然后使用 find /i
作者: 暴牙弟 时间: 2023-6-7 00:09
回复 4# 77七
现在可以运行了,但是只运行了一次 :A, 然后就对话框结束了。不会继续处理jpg图片啊- @echo off
- Setlocal enabledelayedexpansion
- chcp 65001
- FOR /D %%a IN (*) DO (
- echo %%~fa
- cd /d %%~fa
- for /r %%i in (*.jpg) do (
- set pic=%%~ni.jpg
- "C:\Users\暴牙弟\Desktop\ImageMagick\convert.exe" -crop 2470x180+20+193 "%%i" "tmp.jpg"
- tesseract "tmp.jpg" "tmp" -l chi_sim
- find /i "银行" tmp.txt>nul&&echo goto :A||goto :B
-
- :A
- "C:\Users\暴牙弟\Desktop\ImageMagick\convert.exe" -crop 555x80+505+370 "!pic!" "tmp2.jpg"
- tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
- ping -n 2 127.0.0.1>nul
- set /p file=<"tmp2.txt"
- echo !file!
- pause
- mkdir !file!
- move !pic! !file!
- exit /b 0
- :B
- set /P file=<"tmp2.txt"
- move "%%i" !file!
- exit /b 0
- )
- )
- pause
复制代码
作者: 77七 时间: 2023-6-7 00:15
回复 5# 暴牙弟
- @echo off
- chcp 65001
- Setlocal enabledelayedexpansion
- FOR /D %%a IN (*) DO (
- echo %%~fa
- cd /d %%~fa
- for /r %%i in (*.jpg) do (
- convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
- tesseract "tmp.jpg" "tmp" -l chi_sim
- find /i "银行" "tmp.txt" >nul
- if errorlevel 1 (convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
- tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
- ping -n 2 127.0.0.1>nul
- set /P file=<"tmp2.txt"
- mkdir !file!
- move "%%i" !file!
- ) else ( set /P file=<"tmp2.txt"
- move "%%i" !file!)
- )
- )
- pause
复制代码
不用改成goto 吧,这样不行吗?
作者: 暴牙弟 时间: 2023-6-7 00:19
回复 6# 77七
不行。我不明白 0001截取肯定是有银行 两个字的,0002是没有的,没有的话应该是 执行else 后面的,但是他依然顺序执行。所以才想办法用goto。但是goto又没法跳回 for /r 那里继续处理
作者: 77七 时间: 2023-6-7 00:34
回复 7# 暴牙弟
errorlevel 1是失败,0是成功吧,没有银行,应该执行失败,会执行 errorlevel 1那段,不是else 那段。先试试行不行。
goto 的标签不能写在括号里面。
如果想跳回去可以使用call,你可能把call和goto 搞混淆了。
for /r 可能有点问题,可以改成for /f "delims=" %%x in ('dir /b /s /a-d *.jpg') 这种形势
作者: 暴牙弟 时间: 2023-6-7 00:38
回复 8# 77七
无论是0还是1 他都会执行- set /p file=<"tmp2.txt"
- mkdir !file!
- echo !file!
复制代码
现在我实在搞不懂了。
如果用goto 和call 我应该怎么添加 跳转回 for /r 上方?
作者: 77七 时间: 2023-6-7 02:18
回复 9# 暴牙弟
- @echo off
- chcp 65001
- Setlocal enabledelayedexpansion
- FOR /D %%a IN (*) DO (
- pushd "%%a"
- for /f "delims=" %%i in ('dir /b /s /a-d *.jpg') do (
- echo 正在处理:%%i
- convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
- tesseract "tmp.jpg" "tmp" -l chi_sim
- find /i "银行" "tmp.txt" >nul
- if errorlevel 1 (
- echo 正在处理:%%i errorlevel=1
- set /P file=<"tmp2.txt"
- move "%%i" "!file!"
- ) else (
- echo 正在处理:%%i errorlevel=0
- del "tmp2.txt" 2>nul
- convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
- tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
- ping -n 2 127.0.0.1 >nul
- set /P file=<"tmp2.txt"
- mkdir "!file!"
- move "%%i" "!file!"
- )
- del "tmp.txt";"tmp.jpg";"tmp2.jpg" 2>nul
- )
- popd
- )
- pause
复制代码
我觉得没有必要用call,先理清逻辑和检查错误。find的问题不知道是否确定已解决?
如果不行,提供个测试文件吧。
作者: 暴牙弟 时间: 2023-6-7 07:46
回复 10# 77七
用这个可以了 谢谢,看来是for /r的问题
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |