5分钟上手RobotGo:用Go打造自动化截图与文字提取神器

【免费下载链接】robotgo go-vgo/robotgo: RobotGo 是一个用 Go 语言编写的跨平台 GUI 自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。 【免费下载链接】robotgo 项目地址: https://gitcode.com/gh_mirrors/ro/robotgo

你是否还在为重复的截图操作和图片文字提取烦恼?想不想用几行代码实现全流程自动化?本文将带你从零开始,使用RobotGo库快速构建一个跨平台的截图与OCR文字提取工具,让繁琐工作一键搞定!

读完本文你将学会:

  • 安装并配置RobotGo开发环境
  • 实现区域截图与全屏截图功能
  • 集成OCR文字识别提取图片中的文字
  • 打包成可执行文件分享给同事使用

什么是RobotGo?

RobotGo是一个用Go语言编写的跨平台GUI自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。支持Mac、Windows和Linux系统,是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的功能远不止于此,你还可以进一步扩展这个工具:

  1. 定时截图:结合时间调度库,实现定时自动截图识别
  2. 关键词监控:识别到特定关键词时发送通知
  3. 鼠标手势截图:通过鼠标拖拽选择截图区域
  4. 多语言支持:增加对更多语言的OCR识别支持
  5. GUI界面:使用Go的GUI库(如fyne、qt)为工具添加图形界面

更多高级用法可以参考官方示例:examples/

总结

通过本文的介绍,我们学习了如何使用RobotGo库快速构建一个截图与OCR文字提取工具。从环境搭建到功能实现,再到打包分发,整个过程不超过30分钟,却能大大提高工作效率。

RobotGo作为一个强大的自动化工具库,还有很多功能等待你去探索。无论是日常办公自动化、软件测试,还是游戏辅助,RobotGo都能胜任。

希望这个工具能帮助你解决实际问题,如果你有更好的想法或改进建议,欢迎在项目仓库提交PR或issue。

点赞+收藏+关注,获取更多Go语言自动化技巧!下期我们将介绍如何使用RobotGo实现鼠标键盘自动化操作,让你的电脑真正实现无人值守!

参考资源

【免费下载链接】robotgo go-vgo/robotgo: RobotGo 是一个用 Go 语言编写的跨平台 GUI 自动化工具库,它允许开发者编写自动化脚本,模拟鼠标点击、键盘输入、窗口控制等操作。 【免费下载链接】robotgo 项目地址: https://gitcode.com/gh_mirrors/ro/robotgo

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐