开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5131|回复: 5
收起左侧

[源码分享] 百度OCR的调用(可替代那些被游戏公司黑的模块)

[复制链接]
发表于 2017-7-2 13:04:15 | 显示全部楼层 |阅读模式   山东省烟台市
本帖最后由 兔子君 于 2017-7-2 13:32 编辑



    好多写辅Zhu的朋友都知道,大漠的OCR模块因为名气太大,很容易被游戏公司加黑名单,现在我抛砖引玉一下,用百度OCR来识别文字中的文本。    首先要去注册一个百度的帐号,这里不说了,我想大家都会。注册帐号后到登陆后,申请相关的API KEY和secret key .这些东西我就不说了,在大家去申请好了。
     现在说一下代码,百度OCR用C代码调用分为两步,第一步是用API KEY和secret key去申请access token。申请代码如下,大家复制一下就好了
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
        std::string s((char *)ptr, size * nmemb);
        Json::Reader reader;
        Json::Value root;
        reader.parse(s, root);
        access_token_result = root["access_token"].asString();
        return size * nmemb;
}
int get_access_token(std::string &access_token, const std::string &AK, const std::string &SK) {
        CURL *curl;
        CURLcode result_code;
        int success;
        curl = curl_easy_init();
        string aa = (access_token_url + "&client_id=" + AK + "&client_secret=" + SK).data();
        if (curl) {
                curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); //设置问非0表示本次操作为post  
                curl_easy_setopt(curl, CURLOPT_URL,
                        (access_token_url + "&client_id=" + AK + "&client_secret=" + SK).data());

                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
        
                result_code = curl_easy_perform(curl);
                if (result_code != CURLE_OK) {
                        fprintf(stderr, "curl_easy_perform() failed: %s\n",
                                curl_easy_strerror(result_code));
                        success = 1;
                        return success;
                }
                access_token = access_token_result;
                curl_easy_cleanup(curl);
                success = 0;
        }
        else {
                fprintf(stderr, "curl_easy_init() failed.");
                success = 1;
        }
        return success;
}
void mian()
{
        string access_token;
        get_access_token(access_token, "**************", "*************");//第一个参数是记录你申请的access token,第二个是API key ,第三个Secret key

}
这个代码运行完后就在变量access_token里就是我们要申衣的access token,用这个access token就可以进行OCR的调用了。调用代码如下
static size_t OCRcallback(void *ptr, size_t size, size_t nmemb, void *stream) {
        // 获取到的body存放在ptr中,先将其转换为string格式
        general_ocr_result = std::string((char *)ptr, size * nmemb);
        return size * nmemb;
}

int general_ocr(std::string &json_result, const std::string &image_base64, const std::string &access_token) {
        std::string url = general_ocr_url + "?access_token=" + access_token;
        CURL *curl;
        CURLcode result_code;
        int is_success;
        curl = curl_easy_init();
        if (curl) {
                curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); //设置问非0表示本次操作为post  
                curl_easy_setopt(curl, CURLOPT_URL, url.data());
                curl_easy_setopt(curl, CURLOPT_POST, 1);
                curl_httppost *post = NULL;
                curl_httppost *last = NULL;
                curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, image_base64.data(),
                        CURLFORM_END);
                curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, OCRcallback);
                result_code = curl_easy_perform(curl);
                if (result_code != CURLE_OK) {
                        fprintf(stderr, "curl_easy_perform() failed: %s\n",
                                curl_easy_strerror(result_code));
                        is_success = 1;
                        return is_success;
                }
                json_result = general_ocr_result;
                curl_easy_cleanup(curl);
                is_success = 0;
        }
        else {
                fprintf(stderr, "curl_easy_init() failed.");
                is_success = 1;
        }
        return is_success;
}

void mian()
{
        Mat img = imread("1.bmp");

        vector<uchar> vecImg;                               //Mat 图片数据转换为vector<uchar>  
        vector<int> vecCompression_params;
        vecCompression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
        vecCompression_params.push_back(90);
        imencode(".bmp", img, vecImg, vecCompression_params);

        string image= Encode(vecImg.data(), vecImg.size());
       string json_result;
      general_ocr(json_result, image, access_token);//第一个参数是返回的识别结果,第二个是图片,第三个是我们刚才申请的access token

}
注:以上代码和百度提供的调用代码不同,百度提借供的代码是申请不了access_token和识别文字的。
这样在json_result里就是识别出来的文字,大家去试一下吧!!如果大家实现不了可以联系QQ154482118,我一步一步的告诉你,不过我感觉上边说的很详细了。
当然大漠的后的功能都可以用C来实现,如鼠标键盘的操作(当然的推荐大家用硬件来操作),查图,找图等,以后我再开贴一一说明吧

签到天数: 1 天

发表于 2021-1-12 02:41:11 | 显示全部楼层   江苏省常州市
回复 支持 反对

使用道具 举报

发表于 2018-12-25 00:46:09 | 显示全部楼层   广西壮族自治区桂林市
还可以的,试一下好像只需要access_token就行了
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)

签到天数: 1 天

发表于 2018-1-23 17:59:29 | 显示全部楼层   福建省泉州市
易语言版的哪有呢
回复 支持 反对

使用道具 举报

发表于 2017-7-5 10:41:52 | 显示全部楼层   内蒙古自治区包头市
怎么不是易语言的?
回复 支持 反对

使用道具 举报

结帖率:90% (35/39)

签到天数: 21 天

发表于 2017-7-2 13:42:49 | 显示全部楼层   福建省泉州市
有易语言版的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表