5分钟上手RobotGo:用Go打造自动化截图与文字提取神器
- 官方文档:[README.md](https://link.gitcode.com/i/385d03c9ee94212fbab34bb019ddc515)- API文档:[docs/](https://link.gitcode.com/i/8f306f7a484c41187fdf7c28d0f59a72)- 屏幕捕获模块:[screen/screen.go](https://link.gi
5分钟上手RobotGo:用Go打造自动化截图与文字提取神器
你是否还在为重复的截图操作和图片文字提取烦恼?想不想用几行代码实现全流程自动化?本文将带你从零开始,使用RobotGo库快速构建一个跨平台的截图与OCR文字提取工具,让繁琐工作一键搞定!
读完本文你将学会:
- 安装并配置RobotGo开发环境
- 实现区域截图与全屏截图功能
- 集成OCR文字识别提取图片中的文字
- 打包成可执行文件分享给同事使用
什么是RobotGo?
RobotGo是一个用Go语言编写的跨平台GUI自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。支持Mac、Windows和Linux系统,是Go语言开发者实现桌面自动化的首选工具。
项目核心功能模块:
- 屏幕捕获:screen/
- 鼠标控制:mouse/
- 键盘模拟:key/
- 窗口管理:window/
- OCR文字识别:robotgo_ocr.go
官方文档:README.md
环境准备
在开始之前,我们需要先安装必要的依赖。RobotGo需要Golang和GCC编译器的支持,不同操作系统的安装步骤略有不同。
Windows系统
# 安装Go
winget install Golang.go
# 安装LLVM-MinGW编译器
winget install MartinStorsjo.LLVM-MinGW.UCRT
macOS系统
# 安装Go
brew install go
# 安装Xcode命令行工具
xcode-select --install
Linux系统 (Ubuntu/Debian)
# 安装Go
sudo snap install go --classic
# 安装依赖
sudo apt install gcc libc6-dev libx11-dev xorg-dev libxtst-dev xsel xclip libpng++-dev
安装完成后,我们可以通过以下命令获取RobotGo库:
go get github.com/go-vgo/robotgo
实现自动化截图功能
让我们先从截图功能开始实现。RobotGo提供了丰富的屏幕捕获API,支持全屏截图、区域截图和多显示器截图。
基础截图示例
创建一个screenshot.go文件,写入以下代码:
package main
import (
"fmt"
"strconv"
"github.com/go-vgo/robotgo"
)
func main() {
// 获取屏幕尺寸
sx, sy := robotgo.GetScreenSize()
fmt.Printf("屏幕尺寸: %dx%d\n", sx, sy)
// 全屏截图并保存
img, _ := robotgo.CaptureImg()
robotgo.Save(img, "fullscreen.png")
fmt.Println("全屏截图已保存为 fullscreen.png")
// 区域截图 (x, y, width, height)
img2, _ := robotgo.CaptureImg(100, 100, 400, 300)
robotgo.Save(img2, "region.png")
fmt.Println("区域截图已保存为 region.png")
// 多显示器支持示例
num := robotgo.DisplaysNum()
fmt.Printf("检测到 %d 个显示器\n", num)
for i := 0; i < num; i++ {
x, y, w, h := robotgo.GetDisplayBounds(i)
img3, _ := robotgo.CaptureImg(x, y, w, h)
path := "display_" + strconv.Itoa(i) + ".png"
robotgo.Save(img3, path)
fmt.Printf("显示器 %d 截图已保存为 %s\n", i, path)
}
}
这段代码实现了三种常见的截图功能:全屏截图、指定区域截图和多显示器分别截图。关键函数说明:
robotgo.GetScreenSize(): 获取主屏幕尺寸robotgo.CaptureImg(): 捕获屏幕图像,可选参数为区域坐标robotgo.Save(): 保存图像到文件robotgo.DisplaysNum(): 获取显示器数量robotgo.GetDisplayBounds(): 获取指定显示器的边界坐标
运行代码:
go run screenshot.go
执行后,当前目录下会生成多个截图文件,包括全屏截图和区域截图。
集成OCR文字识别功能
截图完成后,我们通常需要提取图片中的文字。RobotGo通过robotgo_ocr.go提供了OCR文字识别功能,基于Tesseract OCR引擎实现。
OCR功能实现
首先需要安装Tesseract OCR引擎:
- Windows: 从 UB Mannheim/tesseract 下载安装
- macOS:
brew install tesseract tesseract-lang - Linux:
sudo apt install tesseract-ocr tesseract-ocr-chi-sim(包含中文语言包)
创建ocr_extract.go文件:
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
// 先截取一个包含文字的区域
img, _ := robotgo.CaptureImg(200, 200, 600, 400)
robotgo.Save(img, "ocr_source.png")
fmt.Println("OCR源图像已保存为 ocr_source.png")
// 提取英文文字
textEn, _ := robotgo.GetText("ocr_source.png")
fmt.Println("\n===== 英文识别结果 =====")
fmt.Println(textEn)
// 提取中文文字 (需要安装中文语言包)
textZh, _ := robotgo.GetText("ocr_source.png", "zh")
fmt.Println("\n===== 中文识别结果 =====")
fmt.Println(textZh)
}
关键函数说明:
robotgo.GetText(imgPath, lang): 识别图片中的文字,第二个参数为语言代码- "eng": 英文
- "zh" 或 "chi_sim": 简体中文
- "ja": 日语
- "ko": 韩语
运行代码:
go run ocr_extract.go
程序会先截取屏幕上(200,200)位置开始,宽600高400的区域,保存为ocr_source.png,然后分别用英文和中文识别图片中的文字并输出。
完整工具:截图+OCR一键提取
现在我们将截图和OCR功能结合起来,创建一个完整的工具,实现"截图→保存→识别文字→输出结果"的全流程自动化。
创建main.go文件:
package main
import (
"fmt"
"os"
"time"
"github.com/go-vgo/robotgo"
)
func main() {
fmt.Println("===== 截图OCR文字提取工具 =====")
fmt.Println("1. 全屏截图OCR")
fmt.Println("2. 区域截图OCR")
fmt.Println("3. 退出")
fmt.Print("请选择功能 (1-3): ")
var choice int
fmt.Scanln(&choice)
switch choice {
case 1:
fullScreenOCR()
case 2:
regionOCR()
case 3:
fmt.Println("谢谢使用!")
os.Exit(0)
default:
fmt.Println("无效选择")
}
}
// 全屏截图OCR
func fullScreenOCR() {
fmt.Println("正在全屏截图...")
img, err := robotgo.CaptureImg()
if err != nil {
fmt.Println("截图失败:", err)
return
}
// 保存截图
filename := fmt.Sprintf("fullscreen_%d.png", time.Now().Unix())
robotgo.Save(img, filename)
fmt.Printf("截图已保存为: %s\n", filename)
// 执行OCR识别
fmt.Println("正在识别文字...")
text, err := robotgo.GetText(filename, "zh")
if err != nil {
fmt.Println("OCR识别失败:", err)
return
}
// 保存识别结果
resultFile := fmt.Sprintf("ocr_result_%d.txt", time.Now().Unix())
f, _ := os.Create(resultFile)
defer f.Close()
f.WriteString(text)
fmt.Printf("\n===== OCR识别结果 =====")
fmt.Println(text)
fmt.Printf("=======================\n")
fmt.Printf("识别结果已保存为: %s\n", resultFile)
}
// 区域截图OCR
func regionOCR() {
fmt.Println("请输入截图区域坐标 (x y width height):")
var x, y, w, h int
fmt.Scanln(&x, &y, &w, &h)
fmt.Println("正在区域截图...")
img, err := robotgo.CaptureImg(x, y, w, h)
if err != nil {
fmt.Println("截图失败:", err)
return
}
// 保存截图
filename := fmt.Sprintf("region_%d.png", time.Now().Unix())
robotgo.Save(img, filename)
fmt.Printf("截图已保存为: %s\n", filename)
// 执行OCR识别
fmt.Println("正在识别文字...")
text, err := robotgo.GetText(filename, "zh")
if err != nil {
fmt.Println("OCR识别失败:", err)
return
}
// 保存识别结果
resultFile := fmt.Sprintf("ocr_result_%d.txt", time.Now().Unix())
f, _ := os.Create(resultFile)
defer f.Close()
f.WriteString(text)
fmt.Printf("\n===== OCR识别结果 =====")
fmt.Println(text)
fmt.Printf("=======================\n")
fmt.Printf("识别结果已保存为: %s\n", resultFile)
}
这个完整工具提供了一个简单的命令行界面,用户可以选择全屏截图OCR或区域截图OCR功能,程序会自动完成截图、保存、OCR识别和结果保存的全流程。
打包与分发
工具开发完成后,我们可以使用Go的交叉编译功能,将程序打包成不同平台的可执行文件。
编译命令
# Windows (64位)
GOOS=windows GOARCH=amd64 go build -o screenshot-ocr-windows.exe main.go
# macOS (64位)
GOOS=darwin GOARCH=amd64 go build -o screenshot-ocr-macos main.go
# Linux (64位)
GOOS=linux GOARCH=amd64 go build -o screenshot-ocr-linux main.go
编译完成后,会生成对应平台的可执行文件,无需安装Go环境即可运行。
高级功能扩展
RobotGo的功能远不止于此,你还可以进一步扩展这个工具:
- 定时截图:结合时间调度库,实现定时自动截图识别
- 关键词监控:识别到特定关键词时发送通知
- 鼠标手势截图:通过鼠标拖拽选择截图区域
- 多语言支持:增加对更多语言的OCR识别支持
- GUI界面:使用Go的GUI库(如fyne、qt)为工具添加图形界面
更多高级用法可以参考官方示例:examples/
总结
通过本文的介绍,我们学习了如何使用RobotGo库快速构建一个截图与OCR文字提取工具。从环境搭建到功能实现,再到打包分发,整个过程不超过30分钟,却能大大提高工作效率。
RobotGo作为一个强大的自动化工具库,还有很多功能等待你去探索。无论是日常办公自动化、软件测试,还是游戏辅助,RobotGo都能胜任。
希望这个工具能帮助你解决实际问题,如果你有更好的想法或改进建议,欢迎在项目仓库提交PR或issue。
点赞+收藏+关注,获取更多Go语言自动化技巧!下期我们将介绍如何使用RobotGo实现鼠标键盘自动化操作,让你的电脑真正实现无人值守!
参考资源
- 项目地址:gh_mirrors/ro/robotgo
- 官方文档:README.md
- API文档:docs/
- 屏幕捕获模块:screen/screen.go
- OCR功能实现:robotgo_ocr.go
- 示例代码:examples/screen/main.go
更多推荐
所有评论(0)