以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] OCR识别不了截屏内容。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=174043)

--  作者:54292550
--  发布时间:2021/12/28 22:42:00
--  [求助] OCR识别不了截屏内容。
参考这个OCR示例:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=100241&page=0&move=next

参考这段截屏代码:
Dim s As new Size(100,100) \'截取的大小
Dim myGraphics As Graphics = basemainform.CreateGraphics()
Dim bit As New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(bit)
memoryGraphics.CopyFromScreen(0,0,0,0,s) \'截取的开始位置,坐标(100, 200)
bit.save("d:\\test.jpg")
memoryGraphics.dispose
myGraphics.dispose
bit.dispose

只要是截屏代码保存的文件,OCR返回的内容是:#ERROR: Failed to load image
就算把能识别的照片通过画图软件直接复制出来,复制到截屏的文件中保存,到截屏中的那个文件就识别不了了。感觉好像是截屏出来的图片格式跟其他有啥不一样吗?


--  作者:有点蓝
--  发布时间:2021/12/28 22:56:00
--  
使用百度AI:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=139788
--  作者:54292550
--  发布时间:2021/12/30 16:14:00
--  
@蓝老师 用百度API是可以用了,我是想做一个监控一样的东西,每秒钟触发一次的监控,这百度按次数算是有些贵了。而且我识别的东西很简单,就四个汉字,我感觉还是Asprise-OCR用起来最便捷,就是我碰到的那个问题很奇怪哦。。截屏自动保存的文件和图片不都一样吗。。咋还出现了那种情况?
--  作者:有点蓝
--  发布时间:2021/12/30 16:42:00
--  
别人的东西内部怎么处理的我们也不知道呀。如果有兼容性问题,要么到网上找找有没有新版的Asprise-OCR,或者联系他们官方咨询一下
--  作者:54292550
--  发布时间:2021/12/30 17:18:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:屏幕截图 2021-12-30 170500.png
图片点击可在新窗口打开查看

蓝老师,找到了一个规律,就是如果我把截屏后的文件通过画图软件另存一下的话就能识别了,保存的文件格式都不需要改,就是存的时候会跳出来丢失透明度的提示,刚才我试了另外一种截屏方法,也是会有丢失透明度的提示,只要另存好了文件,那个OCR就可以用了,就能识别了。这个透明度是个什么情况,截屏的时候能不能直接去掉?

--  作者:有点蓝
--  发布时间:2021/12/30 17:40:00
--  
试试
memoryGraphics.CopyFromScreen(0,0,0,0,s,System.Drawing.CopyPixelOperation.Whiteness)


https://docs.microsoft.com/zh-cn/dotnet/api/system.drawing.graphics.copyfromscreen?view=dotnet-plat-ext-6.0#System_Drawing_Graphics_CopyFromScreen_System_Int32_System_Int32_System_Int32_System_Int32_System_Drawing_Size_System_Drawing_CopyPixelOperation_

--  作者:54292550
--  发布时间:2021/12/30 17:40:00
--  
@蓝老师 搞定了,就把截屏文件直接保存成png格式就行了。
Dim s As new Size(100,100) \'截取的大小
Dim myGraphics As Graphics = basemainform.CreateGraphics()
Dim bit As New Bitmap(s.Width, s.Height, myGraphics)
Dim memoryGraphics As Graphics = Graphics.FromImage(bit)
memoryGraphics.CopyFromScreen(0,0,0,0,s) \'截取的开始位置,坐标(100, 200)
bit.save("d:\\test.png")
memoryGraphics.dispose
myGraphics.dispose
bit.dispose