TiiaHelper.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\utils;
  8. use app\models\Option;
  9. use TencentCloud\Common\Credential;
  10. use TencentCloud\Tiia\V20190529\Models\CreateGroupRequest;
  11. use TencentCloud\Tiia\V20190529\Models\CreateImageRequest;
  12. use TencentCloud\Tiia\V20190529\Models\DeleteImagesRequest;
  13. use TencentCloud\Tiia\V20190529\Models\DescribeGroupsRequest;
  14. use TencentCloud\Tiia\V20190529\Models\SearchImageRequest;
  15. use TencentCloud\Tiia\V20190529\TiiaClient;
  16. class TiiaHelper
  17. {
  18. private static $credential;
  19. private static $client;
  20. private static $groupType = 7;//商品图像搜索2.0升级版。为固定值
  21. public function __construct($config = [])
  22. {
  23. $store_id = $config['store_id'];
  24. $setting = json_decode(Option::get('tencent_image_setting', $store_id, 'saas')['value'], true);
  25. if (empty($setting['secretId']) || empty($setting['secretKey'])) {
  26. return ['code' => 1, 'msg' => '腾讯云账号参数不能为空'];
  27. }
  28. self::$credential = new Credential($setting['secretId'], $setting['secretKey']);
  29. self::$client = new TiiaClient(self::$credential, $setting['region']);
  30. }
  31. /**
  32. * 创建图像库
  33. * @param $GroupId
  34. * @param $GroupName
  35. * @param $MaxCapacity
  36. * @return array
  37. * User: hankaige
  38. * DATE TIME: 2023/1/12 14:13
  39. */
  40. public static function createGroup($GroupId, $GroupName, $MaxCapacity)
  41. {
  42. try {
  43. $request = new CreateGroupRequest();
  44. // 请求需要的参数
  45. $request->deserialize([
  46. 'GroupId' => $GroupId,
  47. 'GroupType' => self::$groupType,
  48. 'GroupName' => $GroupName,
  49. 'MaxCapacity' => $MaxCapacity
  50. ]);
  51. $req = self::$client->CreateGroup($request);
  52. return [
  53. 'code' => 0,
  54. 'data' => json_decode($req->toJsonString(), true),
  55. ];
  56. } catch (\Exception $e) {
  57. return [
  58. 'code' => 1,
  59. 'msg' => $e->getMessage(),
  60. ];
  61. }
  62. }
  63. /**
  64. * 获取已创建的图像库
  65. * @param $GroupId
  66. * @return array
  67. * User: hankaige
  68. * DATE TIME: 2023/1/12 14:13
  69. */
  70. public static function describeGroup($GroupId)
  71. {
  72. try {
  73. $request = new DescribeGroupsRequest();
  74. // 请求需要的参数
  75. $request->deserialize([
  76. 'GroupId' => $GroupId
  77. ]);
  78. $req = self::$client->DescribeGroups($request);
  79. return [
  80. 'code' => 0,
  81. 'data' => json_decode($req->toJsonString(), true),
  82. ];
  83. } catch (\Exception $e) {
  84. return [
  85. 'code' => 1,
  86. 'msg' => $e->getMessage(),
  87. ];
  88. }
  89. }
  90. /**
  91. * 上传图片
  92. * @param $GroupId 图库ID
  93. * @param $EntityId 物品ID,最多支持64个字符。一个物品ID可以包含多张图片,若EntityId已存在,则对其追加图片。同一个EntityId,最大支持10张图。
  94. * @param $PicName 图片名称,最多支持64个字符,PicName唯一确定一张图片,具有唯一性
  95. * @param $ImageUrl
  96. * @return array
  97. * User: hankaige
  98. * DATE TIME: 2023/1/12 14:16
  99. */
  100. public static function createImage($GroupId, $EntityId, $PicName, $ImageUrl)
  101. {
  102. try {
  103. $request = new CreateImageRequest();
  104. // 请求需要的参数
  105. $request->deserialize([
  106. 'GroupId' => $GroupId,
  107. 'EntityId' => $EntityId,
  108. 'PicName' => $PicName,
  109. 'ImageUrl' => $ImageUrl,
  110. 'EnableDetect' => true
  111. ]);
  112. $req = self::$client->CreateImage($request);
  113. \Yii::error(json_encode($req));
  114. return [
  115. 'code' => 0,
  116. 'data' => json_decode($req->toJsonString(), true),
  117. ];
  118. } catch (\Exception $e) {
  119. return [
  120. 'code' => 1,
  121. 'msg' => $e->getMessage(),
  122. ];
  123. }
  124. }
  125. /**
  126. * 删除图库图片
  127. * @param $GroupId
  128. * @param $EntityId
  129. * @param $PicName
  130. * @return array
  131. * User: hankaige
  132. * DATE TIME: 2023/1/12 14:20
  133. */
  134. public static function deleteImages($GroupId,$EntityId,$PicName = ''){
  135. try {
  136. $request = new DeleteImagesRequest();
  137. // 请求需要的参数
  138. $request->deserialize([
  139. 'GroupId' => $GroupId,
  140. 'EntityId' => (string)$EntityId,
  141. 'PicName' => $PicName,
  142. ]);
  143. $req = self::$client->DeleteImages($request);
  144. return [
  145. 'code' => 0,
  146. 'data' => json_decode($req->toJsonString(), true),
  147. ];
  148. } catch (\Exception $e) {
  149. return [
  150. 'code' => 1,
  151. 'msg' => $e->getMessage(),
  152. ];
  153. }
  154. }
  155. /**
  156. * 搜索相似图片
  157. * @param $GroupId 图库ID
  158. * @param $ImageUrl 要搜索的图片链接
  159. * @param $Limit 返回数量 默认20
  160. * @param $MatchThreshold 相似度阙值 默认50 只返回相似度50以上的图片
  161. * @return array
  162. * User: hankaige
  163. * DATE TIME: 2023/1/12 14:23
  164. */
  165. public static function searchImage($GroupId,$Image,$Limit = 20,$MatchThreshold = 50){
  166. try {
  167. $request = new SearchImageRequest();
  168. // 请求需要的参数
  169. $request->deserialize([
  170. 'GroupId' => $GroupId,
  171. 'ImageBase64' => $Image,
  172. 'Limit' => $Limit,
  173. 'MatchThreshold' =>$MatchThreshold
  174. ]);
  175. $req = self::$client->SearchImage($request);
  176. return [
  177. 'code' => 0,
  178. 'data' => json_decode($req->toJsonString(), true),
  179. ];
  180. } catch (\Exception $e) {
  181. return [
  182. 'code' => 1,
  183. 'msg' => $e->getMessage(),
  184. ];
  185. }
  186. }
  187. }