We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
package main import ( "bufio" "encoding/base64" "encoding/json" "fmt" "io/ioutil" "log" "net/http" "net/url" "os" "path/filepath" "strings" "time" ) var maxLen int = 5 * 1024 * 1024 var API_KEY string = "" var SECRET_KEY string = "" var OCR_URL string = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=" var TOKEN_URL string = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials" var pdir string func main() { fmt.Printf("Please enter picture directory: ") fmt.Scanln(&pdir) fd, err := os.ReadDir(pdir) if err != nil { log.Fatal(err) } access_token := fetch_token() for _, ff := range fd { //遍历目录 if ff.Type().IsRegular() && !strings.HasSuffix(ff.Name(), ".txt") { generalBasic(ff.Name(), access_token) } } } // 通用文字识别(标准版) https://ai.baidu.com/ai-doc/OCR/zk3h7xz52 func generalBasic(name string, access_token string) { if pdir == "" { pdir = "." } if access_token == "" { log.Fatal("access_token is empty") } fmt.Println("OCR File[" + filepath.Join(pdir, name) + "]") file, _ := os.Open(filepath.Join(pdir, name)) defer file.Close() time.Sleep(2 * time.Second) //qps limit 1 OCR_URL += access_token res, err := http.Post(OCR_URL, "application/x-www-form-urlencoded", strings.NewReader("image="+url.QueryEscape(base64e(file)))) if err != nil { log.Fatal(err) } defer res.Body.Close() mapdata := make(map[string]interface{}) json.NewDecoder(res.Body).Decode(&mapdata) if mapdata["words_result_num"] == nil { data, _ := ioutil.ReadAll(res.Body) fmt.Printf("%s identification failed:%+v\n", file.Name(), data) return } if int(mapdata["words_result_num"].(float64)) == 0 { fmt.Println(file.Name() + " identification content is empty...") return } f, err := os.OpenFile(file.Name()+".txt", os.O_RDWR|os.O_CREATE, os.ModePerm) if err != nil { log.Fatal(err) } defer f.Close() w := bufio.NewWriter(f) words_result := mapdata["words_result"].([]interface{}) for _, obj := range words_result { m := obj.(map[string]interface{}) fmt.Fprintln(w, m["words"]) } w.Flush() } // 鉴权认证机制 http://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu // post方式报错:unsupported_grant_type func fetch_token() string { res, err := http.Get(TOKEN_URL + "&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY) if err != nil { log.Fatal(err) } defer res.Body.Close() // data, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } mapdata := make(map[string]interface{}) json.NewDecoder(res.Body).Decode(&mapdata) // json.Unmarshal(data, &mapdata) for key, value := range mapdata { // fmt.Println("key:", key, " => value :", value) if key == "access_token" { return value.(string) } if key == "error_description" { log.Fatal(value) } } return "" } // base64 encode func base64e(file *os.File) string { sourcebuffer := make([]byte, maxLen) n, _ := file.Read(sourcebuffer) return base64.StdEncoding.EncodeToString(sourcebuffer[:n]) } // base64 decode func base64d(str string) ([]byte, error) { return base64.StdEncoding.DecodeString(str) }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
The text was updated successfully, but these errors were encountered: