实现区域截图并且识别文字发送到控制台

已存档
wrekemdkwh · 24 天前
第 1 条补充
·
24 天前

把识别到的文字中的数字文本发送到本地端口

第 2 条补充
·
24 天前

要从真机上面发送信息到电脑端的本地数据库当中

回答

Hamibot AI
1
· 24 天前

文档地址 https://docs.hamibot.com/

// 等待无障碍服务启动
auto.waitFor();

// 请求屏幕截图权限
if (!requestScreenCapture()) {
    toastLog('请授予屏幕截图权限!');
    hamibot.exit();
}

// 截取当前屏幕
const screen = captureScreen();

// 定义要截取的区域(左, 上, 右, 下)
// 示例:截取坐标 (100, 200) 到 (500, 400) 的区域
const region = images.clip(screen, 100, 200, 400, 200); // 宽度400,高度200

// 识别该区域的文字内容
const text = ocr.recognizeText(region);

// 将识别结果打印到控制台
log('识别的文字:' + text);

// 发送到脚本消息(需在脚本设置中启用“启用脚本信息”)
hamibot.postMessage('区域OCR结果: ' + text);

使用说明:

  1. 权限:确保已开启无障碍服务并授予屏幕截图权限。
  2. 区域参数images.clip(img, x, y, width, height) 第三个和第四个参数是宽度和高度,不是右下角坐标。
  3. 发送消息hamibot.postMessage() 需要在脚本设置中勾选“启用脚本信息”才会生效。
  4. 提高识别率:可对图像进行预处理,例如灰度化或缩放:
// 可选:提高识别准确率
const processedImg = images.grayscale(region); // 转为灰度图
// const resizedImg = images.resize(processedImg, [300, 150]); // 缩放
const text = ocr.recognizeText(processedImg);

这样即可完成区域截图、文字识别并将结果输出到控制台。


补充回答 1

你可以使用 Hamibot 的 http 模块将识别到的文字中的数字发送到本地端口。以下是一个示例脚本,它会:

  1. 识别屏幕上的文字(你需要配合图像识别或 OCR 功能获取文本)。
  2. 提取文本中的数字。
  3. 使用 http.post 发送到本地指定端口(例如 http://localhost:3000)。

注意:确保你的设备上运行的服务监听了对应的端口,并允许来自外部的请求(如 Hamibot 所在环境)。

// 文档地址 https://docs.hamibot.com/

// 假设你已经通过某种方式获得了识别的文本
var recognizedText = "今天是2025年12月2日,电话13812345678";

// 提取文本中的所有数字
var numbers = recognizedText.match(/\d+/g);
if (numbers) {
    var numberText = numbers.join(''); // 合并所有连续数字部分,如变成 "202512213812345678"
    
    // 发送到本地端口,比如 http://localhost:3000
    var url = 'http://localhost:3000/receive';
    var res = http.post(url, {
        text: numberText
    });

    // 输出响应结果用于调试
    log('发送状态:', res.statusCode);
    log('返回内容:', res.body.string());
} else {
    log('未识别到数字');
}

使用说明:

  • http://localhost:3000/receive 替换为你实际的服务地址和接口路径。
  • 确保本地服务已启用 CORS 或能接收来自 Hamibot 的请求(Android 模拟器中 localhost 指向模拟器自身,若需访问电脑服务,请使用 10.0.2.2 代替 localhost)。
  • 如果你在真机上运行 Hamibot,localhost 是指该手机,目标服务必须在同一设备或局域网可达。

示例:电脑本地 Node.js 接收服务(运行在 PC 上)

如果你希望把数据发回电脑,且 Hamibot 在真机上运行,使用电脑 IP 地址:

var url = 'http://192.168.1.100:3000/receive'; // 改为你的电脑局域网IP

并在电脑上启动一个简单的 HTTP 服务接收数据即可。


补充回答 2

要从真机上的 Hamibot 脚本将信息发送到电脑端的本地数据库,你需要通过局域网将数据从手机上的 Hamibot 发送到电脑上运行的服务接口(API),再由该服务写入数据库。

核心步骤

  1. 确保设备在同一局域网
    手机和电脑必须连接在同一个 Wi-Fi 网络下。

  2. 获取电脑的局域网 IP 地址

    • Windows:命令提示符输入 ipconfig,查找 IPv4 地址(如 192.168.1.100
    • macOS/Linux:终端执行 ifconfigip a,查找 en0 或 wlan0 的 inet 地址
    • 记住这个 IP,例如 192.168.1.100
  3. 在电脑上启动一个接收服务并写入数据库
    以下是一个使用 Node.js + Express 接收数据并保存到 SQLite 数据库的示例:

✅ 示例:Node.js + Express + SQLite 接收服务(运行在电脑上)

npm init -y
npm install express sqlite3 body-parser

创建文件 server.js

// server.js - 运行在你的电脑上
const express = require('express');
const bodyParser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();
const app = express();
const PORT = 3000;

app.use(bodyParser.json());

// 创建数据库并初始化表
const db = new sqlite3.Database('./data.db');
db.run(`CREATE TABLE IF NOT EXISTS texts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    content TEXT,
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)`);

// 接收 POST 请求
app.post('/receive', (req, res) => {
    const { text } = req.body;
    if (!text) {
        return res.status(400).send('Missing "text" field');
    }

    db.run('INSERT INTO texts (content) VALUES (?)', [text], function (err) {
        if (err) {
            console.error(err);
            return res.status(500).send('Save failed');
        }
        console.log(`Saved: ${text}`);
        res.status(200).send('OK');
    });
});

app.listen(PORT, () => {
    console.log(`Server running at http://192.168.1.100:${PORT}`); // 注意是局域网IP
});

启动服务:

node server.js

确保防火墙允许 3000 端口的入站连接。


✅ Hamibot 脚本(运行在真机上)

// 文档地址 https://docs.hamibot.com/

// 使用 OCR 获取图像中的文本
auto.waitFor();
if (!requestScreenCapture()) {
    toastLog('未授予截图权限');
    hamibot.exit();
}

const img = captureScreen();
const result = ocr.recognize(img);
log('识别结果:', result);

// 提取所有数字或纯文本内容
let extractedText = '';
if (Array.isArray(result)) {
    extractedText = result.map(r => r.text).join('\n');
} else if (typeof result === 'string') {
    extractedText = result;
}

// 发送到电脑的本地服务(替换为你的电脑局域网IP)
const pcIp = '192.168.1.100'; // 修改为此电脑的实际IP
const url = `http://${pcIp}:3000/receive`;

try {
    const res = http.post(url, {
        text: extractedText
    }, {
        timeout: 10000
    });

    if (res.statusCode === 200) {
        toastLog('数据已发送到电脑数据库');
    } else {
        toastLog('发送失败: ' + res.statusCode);
    }
} catch (e) {
    toastLog('网络错误: ' + e.message);
}

注意事项

  • 手机和电脑必须处于同一局域网。
  • 防火墙/杀毒软件可能会阻止端口访问,请临时关闭或添加规则放行。
  • 如果使用的是公司或公共网络,可能存在 AP 隔离,禁止设备间通信。建议使用个人路由器或热点测试。
  • 可替换数据库为 MySQL、PostgreSQL、MongoDB 等,只要服务能接收到 HTTP 请求即可处理。

替代方案建议

如果你不想自己搭服务,也可以:

ℹ️ 本回答由 AI 生成,内容仅供参考