# robot **Repository Path**: LessAndfaster/robot ## Basic Information - **Project Name**: robot - **Description**: robot,opencv,tess4j综合实战 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-02-06 - **Last Updated**: 2025-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 功能简介 1. 文本识别 - 只返回文本 - 返回文本和文本所在的坐标:基于Tesseract和基于飞浆的都不是很理想,飞浆的有些重要区域会丢失 2. 区域找图 基于opencv实现,例如在桌面范围内查找此电脑,idea图标,navicate图标,并返回中心点坐标(准确率还是挺高的) 3. 基于robot的鼠标键盘操作 4. 截取子图 其他 - 读取本地摄像头 - 读取视频 # 区域找图 # 基于Tesseract的文本识别 要识别的图片(相对还是比较理想的) ![jingyesi](https://img-blog.csdnimg.cn/img_convert/01cdcf750427aa67a09cd73f12123c56.jpeg) ## 识别并返回图片中的文本 方法 com.lxw.robot.utils.TesseractUtil.tesseract 单元测试 com.lxw.robot.utils.TesseractUtilTest.tesseract ```java com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:42] tesseract - tesseract识别到的文本:床前明月光,疑是地上霜。 举头望明月,低头思故乡。 ``` ## 识别文本并返回对应的区域信息 方法 com.lxw.robot.utils.TesseractUtil.gettextAndRegion 单元测试 com.lxw.robot.utils.TesseractUtilTest#gettextAndRegion ```java 2024-08-27 21:00:37 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:38] gettextAndRegion - 识别块 2024-08-27 21:00:38 INFO com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:66] gettextAndRegion - tesseract获取到的区域数:1 2024-08-27 21:00:38 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 床天明月训,宅是节上祖。 举头望明月,低头思故乡. java.awt.Rectangle[x=36,y=43,width=181,height=40] 2024-08-27 21:00:38 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:38] gettextAndRegion - 识别段落 2024-08-27 21:00:38 INFO com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:66] gettextAndRegion - tesseract获取到的区域数:1 2024-08-27 21:00:38 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 床天明月训,宅是节上祖。 举头望明月,低头思故乡. java.awt.Rectangle[x=36,y=43,width=181,height=40] 2024-08-27 21:00:38 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:38] gettextAndRegion - 识别文本行 2024-08-27 21:00:39 INFO com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:66] gettextAndRegion - tesseract获取到的区域数:2 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 准头至上明月,低头轧故乡。 java.awt.Rectangle[x=36,y=68,width=181,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 床上明月光,妍是地上和福。 java.awt.Rectangle[x=36,y=43,width=181,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:38] gettextAndRegion - 识别单词 2024-08-27 21:00:39 INFO com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:66] gettextAndRegion - tesseract获取到的区域数:4 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 淮头至上月 java.awt.Rectangle[x=36,y=68,width=85,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 床月j昌月光, java.awt.Rectangle[x=36,y=43,width=85,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - <下是]耻上袜。 java.awt.Rectangle[x=132,y=43,width=85,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - {扎头思故乡。 java.awt.Rectangle[x=132,y=68,width=85,height=15] 2024-08-27 21:00:39 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:38] gettextAndRegion - 识别符号 2024-08-27 21:00:40 INFO com.lxw.robot.utils.TesseractUtil [TesseractUtil.java:66] gettextAndRegion - tesseract获取到的区域数:25 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 加 java.awt.Rectangle[x=53,y=43,width=15,height=14] 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 儿 java.awt.Rectangle[x=197,y=68,width=13,height=15] 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 4自 java.awt.Rectangle[x=196,y=43,width=15,height=14] 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 床 java.awt.Rectangle[x=36,y=43,width=16,height=15] 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - FF java.awt.Rectangle[x=164,y=69,width=16,height=13] 2024-08-27 21:00:42 INFO c.lxw.robot.utils.TesseractUtilTest [TesseractUtilTest.java:41] gettextAndRegion - 了 ... ``` 说明: 1. 页面分割模式 - 识别块应该是将这个图片看成一个整体处理 - 识别段落/识别文本行,可能就是将页面按照段落/行分割 - 识别符号是按照符号分割,大概率是一个字符,也有可能是多个字符 # 基于飞浆的文本识别 ## 识别本地图片 方法 com.lxw.robot.utils.PPOCR#doOCRFromFile 单元测试 com.lxw.robot.utils.PPOCRTest#doOCRFromFile ```java PPOCR [PPOCR.java:162] doOCR - 床前明月光,疑是地上霜。:左上角坐标(40,46),中心点坐标:(125,49),宽:170,高:6 PPOCR [PPOCR.java:162] doOCR - 举头望明月,低头思故乡。:左上角坐标(40,71),中心点坐标:(125,74),宽:171,高:6 ``` ## 识别网络图片 方法 com.lxw.robot.utils.PPOCR#doOCRFromUrl 单元测试 com.lxw.robot.utils.PPOCRTest#doOCRFromUrl 说明: 通过单元测试可以看出来飞浆文本识别准确率要更高 ## 桌面指定区域内查找文本 方法 com.lxw.robot.utils.PPOCR.findTextFromDesktop 说明:尽可能指定文本说在区域,这样查找准确 # 截取子图 单元测试见com.lxw.robot.utils.ImageSplitterTest # 图片取背景 单元测试见com.lxw.robot.utils.BackgroundRemovalTest # 二维数组查找 1. 从大数组中找小数组(精确查找) ```java @Test void findSubmatrix4BruteForceSearch() { int[][] largeArray = { {0, 0, 1, 0, 1, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 1} }; int[][] smallArray = { {1, 0}, {0, 0}, {1, 0}, {1, 1} }; // 查找小数组在大数组中的位置 int[] result = MatrixSearcher.findSubmatrix4BruteForceSearch(largeArray, smallArray); // 输出结果 if (result != null) { System.out.println("小数组在大数组中的位置: (" + result[0] + ", " + result[1] + ")"); } else { System.out.println("大数组中不包含小数组"); } } ``` ``` 小数组在大数组中的位置: (0, 4) ``` 2. 从大数组中找小数组(相似度查找) 更多详情见单元测试com.lxw.robot.utils.MatrixSearcherTest # 二维数组之形状查找 com.lxw.robot.utils.ShapeMatcher ```java @Test void findSubArray() { int[][] largeArray = { {1, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 1}, {0, 1, 0, 0, 1, 1}, {1, 0, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 1}, }; int[][] smallArray = { {0, 1}, {0, 1}, {1, 0}, {0, 1} }; int[] result = ShapeMatcher.findSubArray(largeArray, smallArray); if (result != null) { System.out.println("Found at row: " + result[0] + ", column: " + result[1]); } else { System.out.println("Subarray not found"); } } ``` # 图片相似度计算 # 其他