扑克识别OCR API实战:自动识别游戏截图与桌面扑克牌,3分钟搭建算牌器(附Python/Java/PHP/JS示例)
扑克识别OCR API实战:自动识别游戏截图与桌面扑克牌,3分钟搭建算牌器(附Python/Java/PHP/JS示例)
一、为什么需要扑克牌OCR识别?
在游戏辅助、自动化测试和牌局分析中,扑克牌识别是一个高频刚需场景:
| 场景 | 具体需求 | 传统方案痛点 |
|---|---|---|
| 扑克算牌器 | 自动识别游戏画面中的手牌和公共牌,计算剩余牌数 | 手动录入耗时易错,无法实时响应 |
| 游戏自动化测试 | 验证扑克游戏UI中的牌面显示是否正确 | 人工检查效率极低,无法批量验证 |
| 牌局数据分析 | 从直播截图或录像中提取牌局信息 | 无法自动化采集,数据样本有限 |
| 桌面扑克录入 | 将实体扑克牌拍照后自动转为数字记录 | 手动输入慢,容易遗漏 |
扑克牌OCR识别与传统通用OCR的本质区别:
通用OCR(如Tesseract)面对倾斜、低对比度、小字号的牌面文字时,识别率常跌破60%。而专为扑克牌场景优化的OCR API,通过目标检测(YOLO等模型)先定位每张牌的位置,再对牌面区域进行精准识别,准确率可达98%以上,支持多张牌同时检测、部分遮挡和角度倾斜等复杂场景。
二、扑克牌识别技术原理
扑克牌OCR识别接口的技术流程分为三步:
-
目标检测:使用深度学习目标检测模型(如YOLO系列)在图片中定位所有扑克牌的位置,输出每张牌的边界框坐标
-
牌面分割与识别:对每张牌的牌面区域进行OCR识别,提取点数(A、2-10、J、Q、K)和花色(♠♥♦♣)
-
结构化输出:将识别结果组装为结构化JSON,包含每张牌的点数、花色、置信度和位置坐标
扑克牌识别OCR API支持标准52张扑克牌(4花色×13点数)+ 大小王,共54类牌面的识别。
三、准备工作
在开始接入之前,你需要:
-
注册API账号,获取API Key和Secret Key(注册即送免费测试积分)
-
准备一张扑克牌图片(游戏截图或手机拍摄均可,建议牌面清晰可见)
-
选择开发语言(Python/Java/PHP/JS均可)
石榴智能扑克识别:
📌 免费在线体验:支持免费在线体验
📌 API文档:API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
📌 注册送免费测试积分
四、多语言接入实战
以下代码均以调用扑克牌OCR识别API为例,替换YOUR_API_KEY和YOUR_SECRET_KEY为你的真实凭证即可运行。
4.1 Python接入代码
# ==============================================================================
# 免费在线体验:https://market.shiliuai.com/tools/poker-recognition
# API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
#
# ----- 配置信息 -----
# 从石榴智能API市场获取API_KEY或SECRET_KEY:https://market.shiliuai.com/
# ==============================================================================
# -*- coding: utf-8 -*-
import requests
import base64
import json
# 请求接口
URL = "https://ocr-api.shiliuai.com/api/game_ocr/v1"
# 图片转base64
def get_base64(file_path):
with open(file_path, 'rb') as f:
data = f.read()
b64 = base64.b64encode(data).decode('utf8')
return b64
def demo(appcode, file_path):
# 请求头
headers = {
'Authorization': 'APPCODE %s' % appcode,
'Content-Type': 'application/json'
}
# 请求体
b64 = get_base64(file_path)
data = {"image_base64": b64}
# 请求
response = requests.post(url=URL, headers=headers, json=data)
content = json.loads(response.content)
print(content)
if __name__=="__main__":
appcode = "你的APPCODE"
file_path = "本地图片路径"
demo(appcode, file_path)
4.2 扑克算牌器核心逻辑(Python)python
# ==============================================================================
# 免费在线体验:https://market.shiliuai.com/tools/poker-recognition
# API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
#
# ----- 配置信息 -----
# 从石榴智能API市场获取API_KEY或SECRET_KEY:https://market.shiliuai.com/
# ==============================================================================
def poker_counter(image_path):
"""
扑克算牌器:识别牌面并统计剩余牌数
"""
cards = recognize_poker(image_path)
if not cards:
return None
# 统计已出现的牌
rank_count = {}
suit_count = {}
for card in cards:
rank = card.get('rank')
suit = card.get('suit')
rank_count[rank] = rank_count.get(rank, 0) + 1
suit_count[suit] = suit_count.get(suit, 0) + 1
# 标准52张牌中各点数出现4次
standard_rank_count = {r: 4 for r in ['A','2','3','4','5','6','7','8','9','10','J','Q','K']}
# 计算剩余牌数
remaining = {}
for rank in standard_rank_count:
used = rank_count.get(rank, 0)
remaining[rank] = standard_rank_count[rank] - used
print("📊 剩余牌数统计:")
for rank, count in remaining.items():
if count > 0:
print(f" {rank}: {count} 张")
return remaining
4.3 Java接入代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/poker-recognition
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
//
// ----- 配置信息 -----
// 从石榴智能API市场获取API_KEY或SECRET_KEY:https://market.shiliuai.com/
// ==============================================================================
//main.java
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Base64;
public class Main {
public static String get_base64(String path) {
String b64 = "";
try {
// 使用Commons IO简化文件读取
byte[] content = FileUtils.readFileToByteArray(new File(path));
// 使用JDK自带的Base64
b64 = Base64.getEncoder().encodeToString(content);
} catch (IOException e) {
e.printStackTrace();
}
return b64;
}
public static void main(String[] args) {
String url = "https://ocr-api.shiliuai.com/api/game_ocr/v1";// 请求接口
String appcode = "你的APPCODE";
String imgFile = "本地图片路径";
Map headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + appcode);
headers.put("Content-Type", "application/json");
// 请求体
JSONObject requestObj = new JSONObject();
requestObj.put("image_base64", get_base64(imgFile));
String bodys = requestObj.toString();
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
// 创建POST请求
HttpPost httpPost = new HttpPost(url);
// 设置请求头
for (Map.Entry entry : headers.entrySet()) {
httpPost.addHeader(entry.getKey(), entry.getValue());
}
// 设置请求体
StringEntity entity = new StringEntity(bodys, "UTF-8");
httpPost.setEntity(entity);
// 执行请求
HttpResponse response = httpClient.execute(httpPost);
int stat = response.getStatusLine().getStatusCode();
if (stat != 200) {
System.out.println("Http code: " + stat);
return;
}
String res = EntityUtils.toString(response.getEntity());
JSONObject res_obj = JSON.parseObject(res);
System.out.println(res_obj.toJSONString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.4 PHP接入代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/poker-recognition
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
//
// ----- 配置信息 -----
// 从石榴智能API市场获取API_KEY或SECRET_KEY:https://market.shiliuai.com/
// ==============================================================================
//图片转base64
function get_base64($path){
if($fp = fopen($path, "rb", 0)) {
$binary = fread($fp, filesize($path));// 文件读取
fclose($fp);
$b64 = base64_encode($binary);// 转base64
}else{
$b64="";
printf("%s 文件不存在", $path);
}
return $b64;
}
$url = "https://ocr-api.shiliuai.com/api/game_ocr/v1";
$appcode = "你的appcode";
$img_path = "图片路径";
$method = "POST";
//请求头
$headers = array();
array_push($headers, "Authorization:APPCODE " . $appcode);
array_push($headers, "Content-Type:application/json");
//请求体
$b64 = get_base64($img_path);
$data = array(
"image_base64" => $b64
);
$post_data = json_encode($data);
//请求
$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
$result = curl_exec($curl);
var_dump($result);
4.5 JavaScript(Node.js)接入代码
// ==============================================================================
// 免费在线体验:https://market.shiliuai.com/tools/poker-recognition
// API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
//
// ----- 配置信息 -----
// 从石榴智能API市场获取API_KEY或SECRET_KEY:https://market.shiliuai.com/
// ==============================================================================
// 需 Node.js 18+(内置 fetch)
const fs = require('fs');
const apiUrl = 'https://ocr-api.shiliuai.com/api/game_ocr/v1';
const appcode = '你的APPCODE';
const filePath = '本地文件路径';
async function main() {
const fileBase64 = fs.readFileSync(filePath).toString('base64');
const res = await fetch(apiUrl, {
method: 'POST',
headers: {
Authorization: 'APPCODE ' + appcode,
'Content-Type': 'application/json'
},
body: JSON.stringify({ image_base64: fileBase64 })
});
const text = await res.text();
if (!res.ok) {
console.error('Http code:', res.status, text);
return;
}
console.log(JSON.stringify(JSON.parse(text), null, 2));
}
main().catch(console.error);
五、返回字段说明
扑克牌OCR识别API通常返回以下结构化字段:
| 字段名 | 类型 | 说明 | 示例 |
|---|---|---|---|
rank |
String | 牌面点数 | A, 2, 3, ..., 10, J, Q, K |
suit |
String | 花色 | ♠, ♥, ♦, ♣ |
confidence |
Float | 识别置信度(0-1) | 0.96 |
bbox |
Object | 牌面位置坐标(左上角x,y + 宽高) | {"x":120, "y":85, "width":60, "height":85} |
card_type |
String | 牌类型 | standard / joker |
💡 提示:返回的
bbox坐标信息可用于在图片上绘制识别框,方便调试和可视化展示。
六、应用场景与实战案例
场景一:扑克算牌器开发
自动识别游戏画面中的手牌和公共牌,实时统计已出牌数和剩余牌数,辅助玩家决策。
场景二:游戏UI自动化测试
在扑克游戏开发中,使用扑克牌OCR API自动验证牌面显示是否正确,替代人工逐张检查,大幅提升测试效率。
场景三:牌局直播数据分析
从直播截图或录像中自动提取牌局信息,生成数据报表和分析报告。
场景四:桌面扑克数字化
将实体扑克牌拍照后自动转为数字记录,适用于线上扑克教学、牌局复盘等场景。
七、常见问题与解决方案
Q1:识别准确率能达到多少?
专为扑克牌场景优化的OCR API,识别准确率可达98%以上。相比通用OCR(Tesseract等)在扑克牌场景下常跌破60%的识别率,专业扑克牌OCR有质的提升。
Q2:支持哪些图片格式?
支持 JPG、JPEG、PNG、BMP、WEBP 等所有格式,建议图片分辨率500×500以上,经Base64编码后不超过20M。
Q3:支持识别多少张牌?
支持单张图片中多张扑克牌同时识别,包括部分遮挡和角度倾斜的情况。
Q4:支持大小王吗?
支持。标准扑克牌OCR识别覆盖54类牌面(52张标准牌 + 大小王)。
Q5:和通用OCR有什么区别?
通用OCR(如Tesseract)主要识别印刷体文字,对倾斜、旋转、小字号、复杂背景的扑克牌识别效果差。而扑克牌OCR API先通过目标检测定位每张牌的位置,再对牌面进行精准识别,专门针对扑克牌场景优化。
八、总结
扑克牌OCR识别API能够帮助开发者在3分钟内完成接入,自动识别游戏截图或桌面扑克牌图片中的牌面信息,输出点数、花色、位置坐标等结构化数据,识别准确率达98%以上。广泛应用于扑克算牌器、游戏自动化测试、牌局数据分析等场景。
免费在线体验:https://market.shiliuai.com/tools/poker-recognition
API文档完整开发文档和代码示例:https://market.shiliuai.com/doc/poker-recognition-ocr
立即体验:
-
🔗 免费在线体验
-
📖 完整API文档:API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
-
🎁 注册送免费测试积分
-
💻 多语言API:支持Python/Java/PHP/JS/C#/Go等多种语言
相关阅读:
更多推荐




所有评论(0)