資源簡介
開發(fā)環(huán)境為vs2013,使用絕對路徑配置環(huán)境,需要自己修改一下配置路徑
代碼片段和文件信息
//現(xiàn)在我拋磚引玉一下,用百度OCR來識別文字中的文本。????首先要去注冊一個百度的帳號,這里不說了,我想大家都會。注冊帳號后到登陸后,申請相關(guān)的API?KEY和secret?key?.這些東西我就不說了,在大家去申請好了。
//???現(xiàn)在說一下代碼,百度OCR用C代碼調(diào)用分為兩步,第一步是用API?KEY和secret?key去申請access?token。申請代碼如下,大家復(fù)制一下就好了
#include?“stdafx.h“
#include?“json.h“
#include?“reader.h“
#include?“writer.h“
#include?“value.h“
#include?“config.h“
#include?“curl.h“
#include?“crypto.h“
#include?“ocr.h“
#include?
#include?
#include?
#include?
#include??
#include??????????//?std::wstring_convert
#include?????????//?std::codecvt_utf8
#include?????????//?std::uint_least32_t
#include?“atlstr.h“
#include?
#include?“tchar.h“?
#include?
#include?
#include?“base64.h“
#include
using?namespace?cv;
using?namespace?std;
string?general_ocr_result;
//這個代碼運行完后就在變量access_token里就是我們要申衣的access?token,用這個access?token就可以進行OCR的調(diào)用了。調(diào)用代碼如下
static?size_t?OCRcallback(void?*ptr?size_t?size?size_t?nmemb?void?*stream)?
{
//?獲取到的body存放在ptr中,先將其轉(zhuǎn)換為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_tokenconst?std::string?&general_ocr_url)?{
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);?//設(shè)置問非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;
}
static?size_t?callback(void?*ptr?size_t?size?size_t?nmemb?void?*stream)?{
//?獲取到的body存放在ptr中,先將其轉(zhuǎn)換為string格式
std::string?s((char?*)ptr?size?*?nmemb);
//?開始獲取json中的access?token項目
Json::CharReaderBuilder?b;
Json::CharReader*?reader(b.newCharReader());
Json::Value?root;
//reader.parse(s?root);
string?err;
const?char?*pStart?=?s.c_str();
int?nLen?=?s.length();
reader->parse(pStart?pStart?+?nLen?&root?&err);
std::string*?access_token_result?=?static_cast(stream);
*access_token_result?=?root[“access_token“].asString();
return?size?*?nmemb;
}
/**
*?用以獲取access_token的函數(shù),使用時需要先在百度云控制臺申請相應(yīng)功能的應(yīng)用,獲得對應(yīng)的API?Key和Secret?Key
*?@param?access_token?獲取得到的access?token,調(diào)用函數(shù)時需傳入該參數(shù)
*
評論
共有 條評論