实现区域截图并且识别文字发送到控制台
第 1 条补充
· 23 天前
把识别到的文字中的数字文本发送到本地端口
第 2 条补充
· 23 天前
要从真机上面发送信息到电脑端的本地数据库当中
回答
文档地址 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);
使用说明:
- 权限:确保已开启无障碍服务并授予屏幕截图权限。
- 区域参数:
images.clip(img, x, y, width, height)第三个和第四个参数是宽度和高度,不是右下角坐标。 - 发送消息:
hamibot.postMessage()需要在脚本设置中勾选“启用脚本信息”才会生效。 - 提高识别率:可对图像进行预处理,例如灰度化或缩放:
// 可选:提高识别准确率
const processedImg = images.grayscale(region); // 转为灰度图
// const resizedImg = images.resize(processedImg, [300, 150]); // 缩放
const text = ocr.recognizeText(processedImg);
这样即可完成区域截图、文字识别并将结果输出到控制台。
补充回答 1
你可以使用 Hamibot 的 http 模块将识别到的文字中的数字发送到本地端口。以下是一个示例脚本,它会:
- 识别屏幕上的文字(你需要配合图像识别或 OCR 功能获取文本)。
- 提取文本中的数字。
- 使用
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),再由该服务写入数据库。
核心步骤
-
确保设备在同一局域网
手机和电脑必须连接在同一个 Wi-Fi 网络下。 -
获取电脑的局域网 IP 地址
- Windows:命令提示符输入
ipconfig,查找 IPv4 地址(如192.168.1.100) - macOS/Linux:终端执行
ifconfig或ip a,查找 en0 或 wlan0 的 inet 地址 - 记住这个 IP,例如
192.168.1.100
- Windows:命令提示符输入
-
在电脑上启动一个接收服务并写入数据库
以下是一个使用 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 请求即可处理。
替代方案建议
如果你不想自己搭服务,也可以:
- 将数据发送到 [Hamibot 消息推送](https://api.hamibot.com/v
ℹ️ 本回答由 AI 生成,内容仅供参考