• 计算机视觉
    • OpenCV
      • 安装
      • 各语言使用方法
        • Node.js:
        • Python:
        • Java:
      • 部署 NodeCV 服务
    • API
    • 其它方案
      • Sikuli
      • Tesseract
      • Image Diff

    计算机视觉

    Macaca 提供计算机视觉解决方案,用来处理 View 体系之外的问题。如识别测试过程中的截图、测试游戏类产品等,本文档会介绍 OpenCV, Sikuli 和其它被广泛使用的库是如何与 Macaca 结合使用的。另外也会介绍 NodeCV 服务部署,然后便可随时随地使用此图形服务。

    OpenCV

    安装

    MacOS 可使用 brew 来安装:

    1. $ brew install opencv

    请使用稳定的v2(2.4.13.2)版本,源码包下载地址,windows 平台的安装请参考 OpenCV 官网。

    如果不想本机安装使用的请直接使用后面提到的 NodeCV 服务,避免环境的诸多问题。

    各语言使用方法

    Node.js:

    只需要引入 nodecv 模块即可完成图像相似度,特征匹配,特征识别等功能,如下示例。

    1. const nodecv = require('nodecv');
    2. nodecv.imread(image1Path, (err, image1) => {
    3. if (err) {
    4. throw err;
    5. }
    6. nodecv.imread(image2Path, (err, image2) => {
    7. if (err) {
    8. throw err;
    9. }
    10. nodecv.imageDissimilarity(image1, image2, (err, dissimilarity) => {
    11. if (err) {
    12. throw err;
    13. }
    14. console.log(`Dissimilarity: ${dissimilarity}`);
    15. });
    16. });
    17. });

    匹配方式枚举:

    1. CV_TM_SQDIFF =0 平方差匹配法
    2. CV_TM_SQDIFF_NORMED =1 归一化平方差匹配法
    3. CV_TM_CCORR =2 相关匹配法
    4. CV_TM_CCORR_NORMED =3 归一化相关匹配法
    5. CV_TM_CCOEFF =4 相关系数匹配法
    6. CV_TM_CCOEFF_NORMED =5 归一化相关系数匹配法

    更多 Node.js 示例请访问 macaca-sample/cv-sample-node。

    Python:

    1. import cv2
    2. import numpy as np
    3. class opencvSample:
    4. def __init__(self, sourceimage):
    5. self.sourceimage = sourceimage
    6. def match(self, templateimage, threshold=0.8):
    7. image = cv2.imread(self.sourceimage)
    8. template = cv2.imread(templateimage)
    9. result = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
    10. similarity = cv2.minMaxLoc(result)[1]
    11. if similarity < threshold:
    12. return similarity
    13. else:
    14. return np.unravel_index(result.argmax(), result.shape)

    更多 Python 示例请访问 macaca-sample/cv-sample-python。

    Java:

    Java 端请直接使用 JavaCV,更多 Java 示例请访问 macaca-sample/cv-sample-java。

    部署 NodeCV 服务

    Macaca 提供便捷的 Opencv 服务部署,只需要 Docker 环境便可一键部署。

    1. $ git clone https://github.com/macacajs/nodecv-server.git --depth=1
    2. $ cd nodecv-server
    3. $ docker build . -t="node-server"

    然后便可在任意服务器环境,甚至树莓派启动 OpenCV 的 HTTP 服务,macaca-sample 也提供各语言针对服务端通信的示例。

    服务启动成功后可访问 demo 页面: http://localhost:9900/opencv/demo

    计算机视觉 - 图1

    API

    1. POST /opencv/dissimilarity
    1. POST /opencv/matchtemplate
    1. POST /opencv/cascadedetect

    请求 HTTP 服务示例:

    1. request.post({
    2. url: `${remoteHost}/opencv/dissimilarity`,
    3. formData: formData
    4. }, function(err, httpResponse, body) {
    5. if (err) {
    6. return console.error('upload failed:', err);
    7. }
    8. console.log('Server responded with:', body);
    9. try {
    10. const data = JSON.parse(body);
    11. console.log(`Dissimilarity is: ${data.dissimilarity}`);
    12. } catch (e) {
    13. }
    14. });

    更多请见 nodecv-server。

    其它方案

    Sikuli

    Sikuli 是一种图形脚本语言,与 Macaca 配合使用可适应特定的测试场景,更多请见官网sikuli。

    Tesseract

    tesseract 在文字识别等方面非常专业,可与 OpenCV 配合使用。

    Image Diff

    基于像素点对比的图像 Diff,可以使用:

    • uber-archive/image-diff
    • yahoo/blink-diff
      与 Macaca 结合使用的示例地址:macaca-sample/react-native-sample,效果如下:

    计算机视觉 - 图2

    游戏框架 Hilo 也是基于像素点对比的,与 Macaca 结合使用示例见 hiloteam/Hilo 官网。

    原文: https://macacajs.github.io/zh/computer-vision