Skip to content

Commit

Permalink
内容识别
Browse files Browse the repository at this point in the history
  • Loading branch information
lilang committed May 12, 2023
1 parent d9744e7 commit 7bdcb1d
Show file tree
Hide file tree
Showing 9 changed files with 966 additions and 0 deletions.
168 changes: 168 additions & 0 deletions ci.go
Original file line number Diff line number Diff line change
Expand Up @@ -2101,3 +2101,171 @@ func (s *CIService) GetOriginImage(ctx context.Context, name string) (*Response,
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// GetAIImageColoring https://https://cloud.tencent.com/document/product/460/83794
func (s *CIService) GetAIImageColoring(ctx context.Context, name string) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=AIImageColoring",
method: http.MethodGet,
disableCloseBody: true,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// GetAISuperResolution https://cloud.tencent.com/document/product/460/83793
func (s *CIService) GetAISuperResolution(ctx context.Context, name string) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=AISuperResolution",
method: http.MethodGet,
disableCloseBody: true,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// GetAIEnhanceImage https://cloud.tencent.com/document/product/460/83792
func (s *CIService) GetAIEnhanceImage(ctx context.Context, name string) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=AIEnhanceImage",
method: http.MethodGet,
disableCloseBody: true,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// AIImageCropOptions 图像智能裁剪选项
type AIImageCropOptions struct {
DetectUrl string `url:"detect-url,omitempty"`
Width int `url:"width,omitempty"`
Height int `url:"height,omitempty"`
Fixed int `url:"fixed,omitempty"`
IgnoreError string `url:"ignore-error,omitempty"`
}

// GetAIImageCrop https://cloud.tencent.com/document/product/460/83791
func (s *CIService) GetAIImageCrop(ctx context.Context, name string, opt *AIImageCropOptions) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=AIImageCrop",
method: http.MethodGet,
optQuery: opt,
disableCloseBody: true,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// AutoTranslationBlockOptions 实时文字翻译
type AutoTranslationBlockOptions struct {
InputText string `url:"InputText,omitempty"`
SourceLang string `url:"SourceLang,omitempty"`
TargetLang string `url:"TargetLang,omitempty"`
TextDomain string `url:"TextDomain,omitempty"`
TextStyle string `url:"TextStyle,omitempty"`
}

// AutoTranslationBlockResults 实时文字翻译选项
type AutoTranslationBlockResults struct {
XMLName xml.Name `xml:"TranslationResult"`
TranslationResult string `xml:",chardata"`
}

// GetAIImageCrop https://cloud.tencent.com/document/product/460/83547
func (s *CIService) GetAutoTranslationBlock(ctx context.Context, opt *AutoTranslationBlockOptions) (*AutoTranslationBlockResults, *Response, error) {
var res AutoTranslationBlockResults
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/?ci-process=AutoTranslationBlock",
method: http.MethodGet,
optQuery: opt,
disableCloseBody: true,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}

// ImageRepairOptions 图像修复选项
type ImageRepairOptions struct {
MaskPic string `url:"MaskPic,omitempty"`
MaskPoly string `url:"MaskPoly,omitempty"`
}

// GetImageRepair https://cloud.tencent.com/document/product/460/79042
func (s *CIService) GetImageRepair(ctx context.Context, name string, opt *ImageRepairOptions) (*Response, error) {
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=ImageRepair",
method: http.MethodGet,
optQuery: opt,
disableCloseBody: true,
}
resp, err := s.client.send(ctx, &sendOpt)
return resp, err
}

// RecognizeLogoOptions Logo识别选项
type RecognizeLogoOptions struct {
DetectUrl string `url:"detect-url,omitempty"`
IgnoreError string `url:"ignore-error,omitempty"`
}

// RecognizeLogoResults Logo识别结果
type RecognizeLogoResults struct {
XMLName xml.Name `xml:"RecognitionResult"`
Status int `xml:"Status"`
LogoInfo []struct {
Name string `xml:"Name,omitempty"`
Sorce string `xml:"Sorce,omitempty"`
Location struct {
Point []string `xml:"Point,omitempty"`
} `xml:"Location,omitempty"`
} `xml:"LogoInfo,omitempty"`
}

// GetRecognizeLogo https://cloud.tencent.com/document/product/460/79736
func (s *CIService) GetRecognizeLogo(ctx context.Context, name string, opt *RecognizeLogoOptions) (*RecognizeLogoResults, *Response, error) {
var res RecognizeLogoResults
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=RecognizeLogo",
method: http.MethodGet,
optQuery: opt,
disableCloseBody: true,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}

// AssessQualityResults Logo识别结果
type AssessQualityResults struct {
XMLName xml.Name `xml:"Response"`
LongImage bool `xml:"LongImage"`
BlackAndWhite bool `xml:"BlackAndWhite"`
SmallImage bool `xml:"SmallImage"`
BigImage bool `xml:"BigImage"`
PureImage bool `xml:"PureImage"`
ClarityScore int `xml:"ClarityScore"`
AestheticScore int `xml:"AestheticScore"`
RequestId string `xml:"RequestId"`
}

// GetAssessQuality https://cloud.tencent.com/document/product/460/63228
func (s *CIService) GetAssessQuality(ctx context.Context, name string) (*AssessQualityResults, *Response, error) {
var res AssessQualityResults
sendOpt := sendOptions{
baseURL: s.client.BaseURL.BucketURL,
uri: "/" + encodeURIComponent(name) + "?ci-process=AssessQuality",
method: http.MethodGet,
disableCloseBody: true,
result: &res,
}
resp, err := s.client.send(ctx, &sendOpt)
return &res, resp, err
}
146 changes: 146 additions & 0 deletions example/CI/ai_recognition/ai_crop_image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
package main

import (
"context"
"fmt"
"io"
"net/http"
"net/url"
"os"

"github.com/tencentyun/cos-go-sdk-v5"
"github.com/tencentyun/cos-go-sdk-v5/debug"
)

func log_status(err error) {
if err == nil {
return
}
if cos.IsNotFoundError(err) {
// WARN
fmt.Println("WARN: Resource is not existed")
} else if e, ok := cos.IsCOSError(err); ok {
fmt.Printf("ERROR: Code: %v\n", e.Code)
fmt.Printf("ERROR: Message: %v\n", e.Message)
fmt.Printf("ERROR: Resource: %v\n", e.Resource)
fmt.Printf("ERROR: RequestId: %v\n", e.RequestID)
// ERROR
} else {
fmt.Printf("ERROR: %v\n", err)
// ERROR
}
}

// cropImageWhenDownload 图像裁剪, 下载时处理
func cropImageWhenDownload() {
u, _ := url.Parse("https://test-1234567890.cos.ap-chongqing.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("COS_SECRETID"),
SecretKey: os.Getenv("COS_SECRETKEY"),
Transport: &debug.DebugRequestTransport{
RequestHeader: true,
// Notice when put a large file and set need the request body, might happend out of memory error.
RequestBody: false,
ResponseHeader: true,
ResponseBody: false,
},
},
})
obj := "pic/walk.jpeg"
localPath := "test.jpeg"
opt := &cos.AIImageCropOptions{
Width: 128,
Height: 96,
}
resp, err := c.CI.GetAIImageCrop(context.Background(), obj, opt)
log_status(err)
if err == nil {
fd, _ := os.OpenFile(localPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0660)
io.Copy(fd, resp.Body)
fd.Close()
}
}

// 图像裁剪, 上传时处理
func cropImageWhenUpload() {
u, _ := url.Parse("https://test-1234567890.cos.ap-chongqing.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("COS_SECRETID"),
SecretKey: os.Getenv("COS_SECRETKEY"),
Transport: &debug.DebugRequestTransport{
RequestHeader: true,
// Notice when put a large file and set need the request body, might happend out of memory error.
RequestBody: false,
ResponseHeader: true,
ResponseBody: false,
},
},
})
opt := &cos.ObjectPutOptions{
nil,
&cos.ObjectPutHeaderOptions{
XOptionHeader: &http.Header{},
},
}
pic := &cos.PicOperations{
IsPicInfo: 1,
Rules: []cos.PicOperationsRules{
{
FileId: "crop.jpeg",
Rule: "ci-process=AIImageCrop&width=200&height=150",
},
},
}
opt.XOptionHeader.Add("Pic-Operations", cos.EncodePicOperations(pic))
name := "pic/crop/walk.jpeg"
local_filename := "./walk.jpeg"
res, _, err := c.CI.PutFromFile(context.Background(), name, local_filename, opt)
log_status(err)
fmt.Printf("%+v\n", res)
fmt.Printf("%+v\n", res.OriginalInfo)
fmt.Printf("%+v\n", res.ProcessResults)
}

// 图像裁剪, 云上处理
func cropImageWhenCloud() {
u, _ := url.Parse("https://test-1234567890.cos.ap-chongqing.myqcloud.com")
b := &cos.BaseURL{BucketURL: u}
c := cos.NewClient(b, &http.Client{
Transport: &cos.AuthorizationTransport{
SecretID: os.Getenv("COS_SECRETID"),
SecretKey: os.Getenv("COS_SECRETKEY"),
Transport: &debug.DebugRequestTransport{
RequestHeader: true,
// Notice when put a large file and set need the request body, might happend out of memory error.
RequestBody: false,
ResponseHeader: true,
ResponseBody: true,
},
},
})

pic := &cos.PicOperations{
IsPicInfo: 1,
Rules: []cos.PicOperationsRules{
{
FileId: "crop.jpeg",
Rule: "ci-process=AIImageCrop&width=200&height=150",
},
},
}

key := "pic/walk.jpeg"
res, _, err := c.CI.ImageProcess(context.Background(), key, pic)
log_status(err)
fmt.Printf("%+v\n", res)
}

func main() {
cropImageWhenDownload()
// cropImageWhenUpload()
// cropImageWhenCloud()
}

0 comments on commit 7bdcb1d

Please sign in to comment.