
# 翻拍识别示例
本章节对翻拍识别AK/SK方式使用SDK进行示例说明。
- 翻拍识别示例代码只需将AK/SK信息替换为实际AK/SK，代码中可以使用初始化RunRecaptureDetectReq中的Image或Url配置图像信息（image和url参数二选一），示例中以url为例，配置完成后运行即可。
- endpoint是华为云各服务应用区域和各服务的终端节点，详情请查看[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint/Image) 。
1. 翻拍识别调用示例代码如下：
   ```
   #include <cstdlib>
   #include <iostream>
   #include <string>
   #include <memory>
   #include <huaweicloud/core/exception/Exceptions.h>
   #include <huaweicloud/core/Client.h>
   #include <huaweicloud/image/v2/ImageClient.h>
   using namespace HuaweiCloud::Sdk::Image::V2;
   using namespace HuaweiCloud::Sdk::Image::V2::Model;
   using namespace HuaweiCloud::Sdk::Core;
   using namespace HuaweiCloud::Sdk::Core::Exception;
   using namespace std;
   int main(void)
   {
      // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险，建议在配置文件或者环境变量中密文存放，使用时解密，确保安全；
      // 本示例以ak和sk保存在环境变量中来实现身份验证为例，运行本示例前请先在本地环境中设置环境变量CLOUD_SDK_AK和CLOUD_SDK_SK。
       string ak = getenv("CLOUD_SDK_AK");
       string sk = getenv("CLOUD_SDK_SK");
       string projectId = "";
    //image.cn-north-4.myhuaweicloud.com替换为您开通服务区域的终端节点
       string endpoint = "https://image.cn-north-4.myhuaweicloud.com";
       auto auth = std::make_unique<BasicCredentials>();
       auth->withAk(ak)
           .withSk(sk)
           .withProjectId(projectId);
       HttpConfig httpConfig = HttpConfig();
       auto client = ImageClient::newBuilder()
               .withCredentials(std::unique_ptr<Credentials>(auth.release()))
               .withHttpConfig(httpConfig)
               .withEndPoint(endpoint)
               .build();
       RunRecaptureDetectRequest request;
       RecaptureDetectReq body;
       body.setThreshold(0.95);
       body.setImage("输入图片,使用base64编码");
       request.setBody(body);
       std::cout << "-----begin execute request-------" << std::endl;
       try {
           auto reponse = client->runRecaptureDetect(request);
           std::cout << reponse->getHttpBody() << std::endl;
       } catch (HostUnreachableException& e) {
           std::cout << "host unreachable:" << e.what() << std::endl;
       } catch (SslHandShakeException& e) {
           std::cout << "ssl handshake error:" << e.what() << std::endl;
       } catch (RetryOutageException& e) {
           std::cout << "retryoutage error:" << e.what() << std::endl;
       } catch (CallTimeoutException& e) {
           std::cout << "call timeout:" <<  e.what() << std::endl;
       } catch (ServiceResponseException& e) {
           std::cout << "http status code:" << e.getStatusCode() << std::endl;
           std::cout << "error code:" << e.getErrorCode() << std::endl;
           std::cout << "error msg:" << e.getErrorMsg() << std::endl;
           std::cout << "RequestId:" << e.getRequestId() << std::endl;
       } catch (exception& e) {
           std:cout << "unknown exception:" << e.what() << std::endl;
       }
       std::cout << "------request finished--------" << std::endl;
       return 0;
   }
   ```
   
2. 识别结果输出到控制台表示执行成功。
   ```
   {"result":{"suggestion":"false","category":"recapture","score":"0.9998","detail":[{"label":"recapture","confidence":"0.9998"}]}}
   ```
   
 
