,适用于Linux、macOS和Windows系统,旨在使Go语言成为与OpenCV生态系统最新发展兼容的“一等”客户端。
GoCV支持使用Nvidia GPU的CUDA硬件加速,详情参见CUDA README;同时支持Intel OpenVINO工具包,详情参见OpenVINO README。
以下示例打开设备“0”(通常为默认摄像头),读取视频帧并在GUI窗口显示:
gopackage main import ( "gocv.io/x/gocv" ) func main() { webcam, _ := gocv.OpenVideoCapture(0) window := gocv.NewWindow("Hello") img := gocv.NewMat() for { webcam.Read(&img) window.IMShow(img) window.WaitKey(1) } }
!GoCV
该示例打开摄像头,使用级联分类器检测人脸并绘制绿色矩形框:
gopackage main import ( "fmt" "image/color" "gocv.io/x/gocv" ) func main() { // 设置使用视频捕获设备0 deviceID := 0 // 打开摄像头 webcam, err := gocv.OpenVideoCapture(deviceID) if err != nil { fmt.Println(err) return } defer webcam.Close() // 打开显示窗口 window := gocv.NewWindow("Face Detect") defer window.Close() // 准备图像矩阵 img := gocv.NewMat() defer img.Close() // 人脸检测框颜色(蓝色) blue := color.RGBA{0, 0, 255, 0} // 加载人脸分类器 classifier := gocv.NewCascadeClassifier() defer classifier.Close() if !classifier.Load("data/haarcascade_frontalface_default.xml") { fmt.Println("错误:无法读取分类器文件 data/haarcascade_frontalface_default.xml") return } fmt.Printf("开始读取摄像头设备: %v\n", deviceID) for { if ok := webcam.Read(&img); !ok { fmt.Printf("无法读取设备 %v\n", deviceID) return } if img.Empty() { continue } // 检测人脸 rects := classifier.DetectMultiScale(img) fmt.Printf("发现 %d 个人脸\n", len(rects)) // 在图像上绘制人脸矩形框 for _, r := range rects { gocv.Rectangle(&img, r, blue, 3) } // 在窗口显示图像,等待1毫秒 window.IMShow(img) window.WaitKey(1) } }
项目cmd目录提供多种实用命令行工具示例:
安装GoCV前需先安装匹配版本的OpenCV(当前需OpenCV 4.5.3),以下是各系统安装指南。
克隆仓库:
shellcd $HOME/folder/with/your/src/ git clone [***] cd gocv
使用Makefile安装OpenCV 4.5.3:
shellmake install
如需静态库:
shellmake install BUILD_SHARED_LIBS=OFF
成功安装后将显示:
gocv version: 0.28.0 opencv lib version: 4.5.3
参见cuda目录获取详细说明。
shellcd $HOME/folder/with/gocv/ make install_all
如需静态库:
shellmake install_all BUILD_SHARED_LIBS=OFF
shellcd $HOME/src/gocv.io/x/gocv go run ./cmd/version/main.go
应输出:
gocv version: 0.28.0 opencv lib version: 4.5.3
禁用pkg-config自动配置,手动设置CGO环境变量:
shellexport CGO_CPPFLAGS="-I/usr/local/include" export CGO_LDFLAGS="-L/usr/local/lib -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d" go run -tags customenv ./cmd/version/main.go
安装Homebrew后执行:
shellbrew install opencv pkgconfig
验证安装:
shellcd $HOME/folder/with/your/src/gocv go run ./cmd/version/main.go
C:\Program Files\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev2\mingw64\bincmdchdir %GOPATH%\src\gocv.io\x\gocv win_build_opencv.cmd
C:\opencv\build\install\x64\mingw\bincmdgo run cmd\version\main.go
shellcd $HOME/folder/with/your/src/ git clone [***] cd gocv make install_raspi
项目提供Dockerfile,可通过Makefile快速构建:
shellmake docker
指定Go版本:
shellmake docker GOVERSION='1.15'
安装依赖:
shellbrew cask install xquartz brew install socat
安装后需注销并重新登录
配置XQuartz:
启动socat代理:
shellsocat TCP-LISTEN:6000,reuseaddr,fork UNIX-CLIENT:\"$DISPLAY\"
运行容器:
shelldocker run -it --rm -e DISPLAY=docker.for.mac.host.internal:0 your-gocv-app
注意:Docker for Mac不支持摄像头设备,无法运行依赖摄像头的应用
GoCV的Mat对象需显式关闭以避免内存泄漏,可使用-tags matprofile构建标签启用内存分析:
shellgo run -tags matprofile cmd/version/main.go
通过gocv.MatProfile.Count()获取未释放Mat数量,或集成HTTP调试接口监控:
goimport _ "net/http/pprof" // 启动HTTP服务后访问 http://localhost:6060/debug/pprof/gocv.io/x/gocv.Mat
===FULL_DESC===# GoCV
,适用于Linux、macOS和Windows系统,旨在使Go语言成为与OpenCV生态系统最新发展兼容的"一等"客户端。
GoCV支持使用Nvidia GPU的CUDA硬件加速,详情参见CUDA README;同时支持Intel OpenVINO工具包,详情参见OpenVINO README。
以下示例打开设备"0"(通常为默认摄像头),读取视频帧并在GUI窗口显示:
gopackage main import ( "gocv.io/x/gocv" ) func main() { webcam, _ := gocv.OpenVideoCapture(0) window := gocv.NewWindow("Hello") img := gocv.NewMat() for { webcam.Read(&img) window.IMShow(img) window.WaitKey(1) } }
!GoCV
该示例打开摄像头,使用级联分类器检测人脸并绘制绿色矩形框:
gopackage main import ( "fmt" "image/color" "gocv.io/x/gocv" ) func main() { // 设置使用视频捕获设备0 deviceID := 0 // 打开摄像头 webcam, err := gocv.OpenVideoCapture(deviceID) if err != nil { fmt.Println(err) return } defer webcam.Close() // 打开显示窗口 window := gocv.NewWindow("Face Detect") defer window.Close() // 准备图像矩阵 img := gocv.NewMat() defer img.Close() // 人脸检测框颜色(蓝色) blue := color.RGBA{0, 0, 255, 0} // 加载人脸分类器 classifier := gocv.NewCascadeClassifier() defer classifier.Close() if !classifier.Load("data/haarcascade_frontalface_default.xml") { fmt.Println("错误:无法读取分类器文件 data/haarcascade_frontalface_default.xml") return } fmt.Printf("开始读取摄像头设备: %v\n", deviceID) for { if ok := webcam.Read(&img); !ok { fmt.Printf("无法读取设备 %v\n", deviceID) return } if img.Empty() { continue } // 检测人脸 rects := classifier.DetectMultiScale(img) fmt.Printf("发现 %d 个人脸\n", len(rects)) // 在图像上绘制人脸矩形框 for _, r := range rects { gocv.Rectangle(&img, r, blue, 3) } // 在窗口显示图像,等待1毫秒 window.IMShow(img) window.WaitKey(1) } }
项目cmd目录提供多种实用命令行工具示例:
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429