/// <summary> /// 本接口用于对一张待识别的商品图片,在指定图片库中检索出最相似的图片列表。 /// </summary> /// <param name="req"><see cref="SearchImageRequest"/></param> /// <returns><see cref="SearchImageResponse"/></returns> public SearchImageResponse SearchImageSync(SearchImageRequest req) { JsonResponseModel <SearchImageResponse> rsp = null; try { var strResp = this.InternalRequestSync(req, "SearchImage"); rsp = JsonConvert.DeserializeObject <JsonResponseModel <SearchImageResponse> >(strResp); } catch (JsonSerializationException e) { throw new TencentCloudSDKException(e.Message); } return(rsp.Response); }
public string Get(string username) { try { _logger.LogInformation($"Getting property details for {username} for image url {HttpContext.Request.Query["image"]}"); var imgSearchReq = new SearchImageRequest { org_image_url = HttpContext.Request.Query["image"] }; var response = new Response(); response.milestones.Add("Getting property details"); try { _logger.LogInformation("ORCHESTRATOR SERVICE: get all images from DB"); using (var sqlConn = new SqlConnection(DB_CONN)) { sqlConn.Open(); var query = "SELECT Path from [dbo].[Image]"; using (SqlCommand cmd = new SqlCommand(query, sqlConn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { imgSearchReq.comp_image_urls.Add(reader.GetString(0)); } } } } _logger.LogInformation($"ORCHESTRATOR SERVICE: retrieved {imgSearchReq.comp_image_urls.Count} images from DB"); response.milestones.Add("Retrieved images from DB"); } catch (Exception ex) { response.milestones.Add($"Error getting details from DB: {ex.Message}"); return($"Error getting all images from DB: {ex.Message}"); } VerifyImage verifyImg; try { _logger.LogInformation($"ORCHESTRATOR SERVICE: verify if the image is a house"); response.milestones.Add("Verifying image"); using (var httpClient = new HttpClient()) { _logger.LogInformation($"ORCHESTRATOR SERVICE: calling {ML_API}/? image_url={imgSearchReq.org_image_url}"); using (var res = httpClient.GetAsync(ML_API + "/?image_url=" + imgSearchReq.org_image_url)) { var apiResponse = res.Result.Content.ReadAsStringAsync().Result; _logger.LogInformation($"ORCHESTRATOR SERVICE: received response from {ML_API}/? image_url={imgSearchReq.org_image_url} ---- {res.Result.StatusCode}"); if (res.Result.IsSuccessStatusCode) { _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserializing response {apiResponse}"); verifyImg = JsonConvert.DeserializeObject <VerifyImage>(apiResponse); _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserialized response {string.Join(';', verifyImg.tags.ToArray())}"); response.milestones.Add("It is a house"); } else { _logger.LogInformation($"ORCHESTRATOR SERVICE: Image is not a house"); verifyImg = new VerifyImage { is_house = false }; _logger.LogInformation($"ORCHESTRATOR SERVICE: Image is {string.Join(';', verifyImg.tags.ToArray())}"); response.milestones.Add("It is not a house"); } } response.isHouse = verifyImg.is_house; } _logger.LogInformation("ORCHESTRATOR SERVICE: get user details from DB"); response.milestones.Add("Getting User details from DB"); using (var sqlConn = new SqlConnection(DB_CONN)) { sqlConn.Open(); var query = $"SELECT * from [dbo].[UserProfile] where username='******'"; using (SqlCommand cmd = new SqlCommand(query, sqlConn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { response.user = new Core.UserProfile { userId = reader.GetInt32(0).ToString(), username = reader.GetString(1), firstName = reader.GetString(3), lastName = reader.GetString(4), middleName = reader.GetString(5), creditScore = reader.GetInt32(6), aum = reader.GetInt32(7), relationshipAge = reader.GetInt32(8), phone = reader.GetString(9), emailAddress = reader.GetString(10), accountNumber = reader.GetString(11) }; } } } } _logger.LogInformation($"ORCHESTRATOR SERVICE: retrieved {JsonConvert.SerializeObject(response.user)} from DB"); response.milestones.Add("Got User details from DB"); } catch (Exception ex) { return($"Error verifying image: {ex.Message}"); } if (!verifyImg.is_house) { _logger.LogInformation($"ORCHESTRATOR SERVICE: returning early since the image is not a house"); return(JsonConvert.SerializeObject(response)); } SearchImageResponse imgSearchResponse; try { _logger.LogInformation($"ORCHESTRATOR SERVICE: send query image and all DB images to ML model"); response.milestones.Add("calling vision service"); using (var httpClient = new HttpClient()) { var httpContent = new StringContent(JsonConvert.SerializeObject(imgSearchReq), Encoding.UTF8, "application/json"); { _logger.LogInformation($"ORCHESTRATOR SERVICE: calling {ML_API} using {httpContent}"); using (var res = httpClient.PostAsync(ML_API, httpContent)) { var apiResponse = res.Result.Content.ReadAsStringAsync().Result; _logger.LogInformation($"ORCHESTRATOR SERVICE: received response from {ML_API} for image matching ---- {res.Result.StatusCode}"); if (res.Result.IsSuccessStatusCode) { _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserializing response {apiResponse}"); imgSearchResponse = JsonConvert.DeserializeObject <SearchImageResponse>(apiResponse); response.propertyFound = true; _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserialized response {imgSearchResponse.comp_image_url} and {imgSearchResponse.message}"); response.milestones.Add("Property was found"); } else { response.propertyFound = false; imgSearchResponse = new SearchImageResponse { comp_image_url = "https://azsnappersblob.blob.core.windows.net/images/HouseNotFound.PNG", message = "Property not found" }; _logger.LogInformation($"ORCHESTRATOR SERVICE: Image not matched... returning property not found image"); response.milestones.Add("Property was not found"); // var p = new Random().Next(0, 65); //_logger.LogInformation($"ORCHESTRATOR SERVICE: Image not matched... picking a random image {p}"); //if (p == 0) //{ // imgSearchResponse = new SearchImageResponse { comp_image_url = "https://azsnappersblob.blob.core.windows.net/images/HouseNotFound.PNG", message = "Property not found" }; //} //else //{ // imgSearchResponse = new SearchImageResponse { comp_image_url = imgSearchReq.comp_image_urls[p - 1], message = "Randomly chosen house image" }; //} //_logger.LogInformation($"ORCHESTRATOR SERVICE: Image not matched... picked a random image {JsonConvert.SerializeObject(imgSearchResponse)}"); } } } } } catch (Exception ex) { return($"Error matching image from vision service: {ex.Message}"); } var mtgReq = new MortgageQuoteRequest(); try { _logger.LogInformation($"ORCHESTRATOR SERVICE: get property from return image url"); response.milestones.Add("Getting property details from DB"); using (var sqlConn = new SqlConnection(DB_CONN)) { sqlConn.Open(); var query = $"select P.*, I.Path from [dbo].[image] I, [dbo].[Property] P where I.PropertyId = P.PropertyId and I.Path = '{imgSearchResponse.comp_image_url}'"; using (SqlCommand cmd = new SqlCommand(query, sqlConn)) { using (var reader = cmd.ExecuteReader()) { var added = false; while (reader.Read()) { if (!added) { added = true; response.propertyList.Add(new Property { imageUrl = reader.GetString(16), address = $"{reader.GetString(1)}, {reader.GetString(3)}, {reader.GetString(4)} {reader.GetString(5)}", area = reader.GetDouble(14).ToString(), numberOfBedrooms = reader.GetInt32(7), numberOfBathrooms = reader.GetInt32(8), cost = reader.GetDouble(13).ToString(), status = reader.GetString(12), tax = reader.GetDouble(15).ToString(), zip = reader.GetString(5), propertyId = reader.GetInt32(0).ToString() }); } response.propertyList[0].moreImages.Add(reader.GetString(16)); } } } } _logger.LogInformation($"ORCHESTRATOR SERVICE: retrieved property details from DB --- {JsonConvert.SerializeObject(response.propertyList)}"); response.milestones.Add("Got property details from DB"); mtgReq.AccountDetails = new AccountDetails { AccountNumber = response.user.accountNumber, AUM = decimal.Parse(response.user.aum.ToString()), Tenure = response.user.relationshipAge.ToString(), UserId = response.user.userId }; var age = new Random().Next(5, 50); mtgReq.PropertyDetails = new PropertyDetails { Zipcode = response.propertyList[0].zip, Area = response.propertyList[0].area.ToString(), Cost = decimal.Parse(response.propertyList[0].cost), AgeInYears = age, contrustedIn = DateTime.Now.AddYears(-1 * age), NumberOfBedrooms = response.propertyList[0].numberOfBedrooms, PropertyId = response.propertyList[0].propertyId }; _logger.LogInformation($"ORCHESTRATOR SERVICE: send user and property details to mortgage service --- {JsonConvert.SerializeObject(mtgReq)}"); } catch (Exception ex) { return($"Error getting selected property from DB: {ex.Message}"); } response.milestones.Add("Getting quote from Mortgage service"); try { MortgageQuoteResponse mtgResponse; using (var httpClient = new HttpClient()) { var httpContent = new StringContent(JsonConvert.SerializeObject(mtgReq), Encoding.UTF8, "application/json"); { _logger.LogInformation($"ORCHESTRATOR SERVICE: calling {MTG_API} using {httpContent}"); using (var res = httpClient.PostAsync(MTG_API, httpContent)) { var apiResponse = res.Result.Content.ReadAsStringAsync().Result; _logger.LogInformation($"ORCHESTRATOR SERVICE: received response from {MTG_API} for mortgage saearch ---- {res.Result.StatusCode}"); if (res.Result.IsSuccessStatusCode) { _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserializing response {apiResponse}"); mtgResponse = JsonConvert.DeserializeObject <MortgageQuoteResponse>(apiResponse); response.quoteFound = true; _logger.LogInformation($"ORCHESTRATOR SERVICE: Deserialized response {JsonConvert.SerializeObject(mtgResponse)}"); response.milestones.Add("Got quote from Mortgage service"); } else { mtgResponse = new MortgageQuoteResponse { AccountNumber = mtgReq.AccountDetails.AccountNumber, UserId = response.user.userId, IsPreApproved = false, PropertyId = mtgReq.PropertyDetails.PropertyId, DownPayment = 0, MonthlyEMI = 0, RateofInterest = "0" }; response.quoteFound = false; _logger.LogInformation($"ORCHESTRATOR SERVICE: Image not matched... setting default dummy response {JsonConvert.SerializeObject(mtgResponse)}"); response.milestones.Add("Dummy quote generated"); } response.propertyList[0].quoteDetails.downPayment = mtgResponse.DownPayment; response.propertyList[0].quoteDetails.isPreApproved = mtgResponse.IsPreApproved; response.propertyList[0].quoteDetails.monthlyPayment = mtgResponse.MonthlyEMI; response.propertyList[0].quoteDetails.rateOfInterest = mtgResponse.RateofInterest; } } } } catch (Exception ex) { return($"Error getting mortgage quote: {ex.Message}"); } _logger.LogInformation($"ORCHESTRATOR SERVICE: send user, property and mortgage details back to UI {JsonConvert.SerializeObject(response)}"); response.milestones.Add("Sending full response back"); return(JsonConvert.SerializeObject(response)); } catch (Exception exc) { return(exc.Message); } }
public async Task <SearchImageResponse> SearchImageAsync(SearchImageRequest request) { AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); return(await SearchImageWithOptionsAsync(request, runtime)); }
public SearchImageResponse SearchImage(SearchImageRequest request) { AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); return(SearchImageWithOptions(request, runtime)); }
public async Task <SearchImageResponse> SearchImageWithOptionsAsync(SearchImageRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime) { AlibabaCloud.TeaUtil.Common.ValidateModel(request); return(TeaModel.ToObject <SearchImageResponse>(await DoRequestWithActionAsync("SearchImage", "2019-03-25", "HTTPS", "POST", "AK", "/v2/image/search", null, request.Headers, request.Body.ToMap(), runtime))); }
public SearchImageResponse SearchImageAdvance(SearchImageAdvanceRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime) { // Step 0: init client string accessKeyId = this._credential.GetAccessKeyId(); string accessKeySecret = this._credential.GetAccessKeySecret(); AlibabaCloud.RPCClient.Models.Config authConfig = new AlibabaCloud.RPCClient.Models.Config { AccessKeyId = accessKeyId, AccessKeySecret = accessKeySecret, Type = "access_key", Endpoint = "openplatform.aliyuncs.com", Protocol = _protocol, RegionId = _regionId, }; AlibabaCloud.SDK.OpenPlatform20191219.Client authClient = new AlibabaCloud.SDK.OpenPlatform20191219.Client(authConfig); AlibabaCloud.SDK.OpenPlatform20191219.Models.AuthorizeFileUploadRequest authRequest = new AlibabaCloud.SDK.OpenPlatform20191219.Models.AuthorizeFileUploadRequest { Product = "imgsearch", RegionId = _regionId, }; AlibabaCloud.SDK.OpenPlatform20191219.Models.AuthorizeFileUploadResponse authResponse = authClient.AuthorizeFileUploadWithOptions(authRequest, runtime); // Step 1: request OSS api to upload file AlibabaCloud.OSS.Models.Config ossConfig = new AlibabaCloud.OSS.Models.Config { AccessKeyId = authResponse.AccessKeyId, AccessKeySecret = accessKeySecret, Type = "access_key", Endpoint = AlibabaCloud.Commons.Common.GetEndpoint(authResponse.Endpoint, authResponse.UseAccelerate, _endpointType), Protocol = _protocol, RegionId = _regionId, }; AlibabaCloud.OSS.Client ossClient = new AlibabaCloud.OSS.Client(ossConfig); AlibabaCloud.SDK.TeaFileform.Models.FileField fileObj = new AlibabaCloud.SDK.TeaFileform.Models.FileField { Filename = authResponse.ObjectKey, Content = request.ImageUrlObject, ContentType = "", }; AlibabaCloud.OSS.Models.PostObjectRequest.PostObjectRequestHeader ossHeader = new AlibabaCloud.OSS.Models.PostObjectRequest.PostObjectRequestHeader { AccessKeyId = authResponse.AccessKeyId, Policy = authResponse.EncodedPolicy, Signature = authResponse.Signature, Key = authResponse.ObjectKey, File = fileObj, SuccessActionStatus = "201", }; AlibabaCloud.OSS.Models.PostObjectRequest uploadRequest = new AlibabaCloud.OSS.Models.PostObjectRequest { BucketName = authResponse.Bucket, Header = ossHeader, }; AlibabaCloud.OSSUtil.Models.RuntimeOptions ossRuntime = new AlibabaCloud.OSSUtil.Models.RuntimeOptions(); AlibabaCloud.Commons.Common.Convert(runtime, ossRuntime); ossClient.PostObject(uploadRequest, ossRuntime); // Step 2: request final api SearchImageRequest searchImagereq = new SearchImageRequest(); AlibabaCloud.Commons.Common.Convert(request, searchImagereq); searchImagereq.ImageUrl = "http://" + authResponse.Bucket + "." + authResponse.Endpoint + "/" + authResponse.ObjectKey; SearchImageResponse searchImageResp = SearchImage(searchImagereq, runtime); return(searchImageResp); }
public async Task <SearchImageResponse> SearchImageAsync(SearchImageRequest request, AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime) { AlibabaCloud.TeaUtil.Common.ValidateModel(request); return(TeaModel.ToObject <SearchImageResponse>(await DoRequestAsync("SearchImage", "HTTPS", "POST", "2020-03-20", "AK", null, request.ToMap(), runtime))); }