[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助批处理实现图片ocr归类

一堆001.jpg  002.jpg  003.jpg……

我用convert截取顶部 然后ocr识别导出tmp.txt

如果txt有银行二字,就截取底部指定位置,ocr识别出数字保存到tmp2.txt 并将这个数字新建文件夹,将被截取的图片放进去。

否则,否则就将图片直接放到上一个新建的文件夹中。
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. FOR /D %%a IN (*) DO (
  4. echo %%~fa
  5. cd /d %%~fa
  6. for /r %%i in (*.jpg) do (
  7. convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
  8. tesseract "tmp.jpg" "tmp" -l chi_sim
  9. findstr /i "银行" "tmp.txt" >nul
  10. if errorlevel 1 (convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
  11. tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
  12. ping -n 2 127.0.0.1>nul
  13. set /P file=<"tmp2.txt"
  14. mkdir !file!
  15. move "%%i" !file!
  16. ) else ( set /P file=<"tmp2.txt"
  17. move "%%i" !file!)
  18. )
  19. )
  20. pause
复制代码
现在的问题是,就算tmp.txt没有"银行"二字,他也是会执行  else 之前的步骤。

可能是编码的问题造成的。
参考一下这个帖子  http://www.bathome.net/viewthread.php?tid=66267
bat小白,请多指教!谢谢!

TOP

回复 2# 77七


  我用 &&goto A||goto B
根本不会正常运行。直接就是B

TOP

本帖最后由 77七 于 2023-6-6 23:45 编辑

回复 3# 暴牙弟


http://www.bathome.net/redirect.php?goto=findpost&;ptid=66267&pid=269641
然后使用 find /i
bat小白,请多指教!谢谢!

TOP

回复 4# 77七

现在可以运行了,但是只运行了一次 :A, 然后就对话框结束了。不会继续处理jpg图片啊
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. chcp 65001
  4. FOR /D %%a IN (*) DO (
  5. echo %%~fa
  6. cd /d %%~fa
  7. for /r %%i in (*.jpg) do (
  8. set pic=%%~ni.jpg
  9. "C:\Users\暴牙弟\Desktop\ImageMagick\convert.exe" -crop 2470x180+20+193 "%%i" "tmp.jpg"
  10. tesseract "tmp.jpg" "tmp" -l chi_sim
  11. find /i "银行" tmp.txt>nul&&echo goto :A||goto :B
  12. :A
  13. "C:\Users\暴牙弟\Desktop\ImageMagick\convert.exe" -crop 555x80+505+370 "!pic!" "tmp2.jpg"
  14. tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
  15. ping -n 2 127.0.0.1>nul
  16. set /p file=<"tmp2.txt"
  17. echo !file!
  18. pause
  19. mkdir !file!
  20. move !pic! !file!
  21. exit /b 0
  22. :B
  23. set /P file=<"tmp2.txt"
  24. move "%%i" !file!
  25. exit /b 0
  26. )
  27. )
  28. pause
复制代码

TOP

回复 5# 暴牙弟


  
  1. @echo off
  2. chcp 65001
  3. Setlocal enabledelayedexpansion
  4. FOR /D %%a IN (*) DO (
  5. echo %%~fa
  6. cd /d %%~fa
  7. for /r %%i in (*.jpg) do (
  8. convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
  9. tesseract "tmp.jpg" "tmp" -l chi_sim
  10. find /i "银行" "tmp.txt" >nul
  11. if errorlevel 1 (convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
  12. tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
  13. ping -n 2 127.0.0.1>nul
  14. set /P file=<"tmp2.txt"
  15. mkdir !file!
  16. move "%%i" !file!
  17. ) else ( set /P file=<"tmp2.txt"
  18. move "%%i" !file!)
  19. )
  20. )
  21. pause
复制代码
不用改成goto 吧,这样不行吗?
bat小白,请多指教!谢谢!

TOP

回复 6# 77七

不行。我不明白  0001截取肯定是有银行  两个字的,0002是没有的,没有的话应该是 执行else 后面的,但是他依然顺序执行。所以才想办法用goto。但是goto又没法跳回 for /r 那里继续处理

TOP

回复 7# 暴牙弟


   errorlevel 1是失败,0是成功吧,没有银行,应该执行失败,会执行 errorlevel 1那段,不是else 那段。先试试行不行。
goto 的标签不能写在括号里面。
如果想跳回去可以使用call,你可能把call和goto 搞混淆了。
for /r 可能有点问题,可以改成for /f "delims=" %%x in ('dir /b /s /a-d *.jpg') 这种形势
bat小白,请多指教!谢谢!

TOP

回复 8# 77七

无论是0还是1 他都会执行
  1. set /p file=<"tmp2.txt"
  2.     mkdir !file!
  3.     echo !file!
复制代码
现在我实在搞不懂了。
如果用goto 和call 我应该怎么添加 跳转回 for /r 上方?

TOP

回复 9# 暴牙弟


  
  1. @echo off
  2. chcp 65001
  3. Setlocal enabledelayedexpansion
  4. FOR /D %%a IN (*) DO (
  5. pushd "%%a"
  6. for /f "delims=" %%i in ('dir /b /s /a-d *.jpg') do (
  7. echo 正在处理:%%i
  8. convert.exe -crop 2470x180+20+193 "%%i" "tmp.jpg"
  9. tesseract "tmp.jpg" "tmp" -l chi_sim
  10. find /i "银行" "tmp.txt" >nul
  11. if errorlevel 1 (
  12. echo 正在处理:%%i errorlevel=1
  13. set /P file=<"tmp2.txt"
  14. move "%%i" "!file!"
  15. ) else (
  16. echo 正在处理:%%i errorlevel=0
  17. del "tmp2.txt" 2>nul
  18. convert -crop 555x80+505+370 "%%i" "tmp2.jpg"
  19. tesseract.exe "tmp2.jpg" "tmp2" -l chi_sim
  20. ping -n 2 127.0.0.1 >nul
  21. set /P file=<"tmp2.txt"
  22. mkdir "!file!"
  23. move "%%i" "!file!"
  24. )
  25. del "tmp.txt";"tmp.jpg";"tmp2.jpg" 2>nul
  26. )
  27. popd
  28. )
  29. pause
复制代码
我觉得没有必要用call,先理清逻辑和检查错误。find的问题不知道是否确定已解决?
如果不行,提供个测试文件吧。
bat小白,请多指教!谢谢!

TOP

回复 10# 77七

用这个可以了 谢谢,看来是for  /r的问题

TOP

返回列表