forked from ilyapashuk/cloudvis
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit e396418
Showing
2 changed files
with
154 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
package main | ||
import "time" | ||
import "fmt" | ||
import "net/http" | ||
import "encoding/json" | ||
import "mime/multipart" | ||
import "io/ioutil" | ||
import "os" | ||
import "log" | ||
import "flag" | ||
import "bytes" | ||
var ApiUrl string = "https://visionbot.ru/apiv2" | ||
func multipartuploadreq(url string, params map[string]string, filedata []byte) *http.Request { | ||
rbody := new(bytes.Buffer) | ||
writer := multipart.NewWriter(rbody) | ||
filepart,_ := writer.CreateFormFile("file", "img") | ||
filepart.Write(filedata) | ||
for parname,parval := range params { | ||
writer.WriteField(parname, parval) | ||
} | ||
err := writer.Close() | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
req,_ := http.NewRequest("POST", "https://visionbot.ru/apiv2/in.php", rbody) | ||
req.Header.Set("Content-Type", writer.FormDataContentType()) | ||
return req | ||
} | ||
func main() { | ||
flag.Usage = func() { | ||
fmt.Fprintf(os.Stderr, "Usage: %s [opts] [file] \n file is a image file name. png and jpg are officially supported. \n Opts can be one of:\n", os.Args[0]) | ||
flag.PrintDefaults() | ||
} | ||
usestdin := flag.Bool("stdin", false, "get image data from stdin, filename will be ignored") | ||
lang := flag.String("l", "en", "set `language` name to use. language is formed as two letter code, like ru or en, default is en.") | ||
target := flag.String("t", "all", "data `type` to recognize. can be 'text', 'image' or 'all'.") | ||
flag.Parse() | ||
var file *os.File | ||
var err error | ||
if *usestdin { | ||
file = os.Stdin | ||
} else { | ||
file,err = os.Open(flag.Arg(0)) | ||
} | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
filedata,err := ioutil.ReadAll(file) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
file.Close() | ||
params := map[string]string{"lang": *lang, "target": *target} | ||
req := multipartuploadreq(ApiUrl + "/in.php", params, filedata) | ||
os.Stderr.WriteString("uploading image\n") | ||
resp,err := http.DefaultClient.Do(req) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
bodydata,err := ioutil.ReadAll(resp.Body) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
resp.Body.Close() | ||
var bodyresult map[string]string | ||
err = json.Unmarshal(bodydata, &bodyresult) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
if bodyresult["status"] != "ok" { | ||
log.Fatal(fmt.Errorf("server error")) | ||
} | ||
id := bodyresult["id"] | ||
os.Stderr.WriteString("waiting for result\n") | ||
for { | ||
time.Sleep(500 * time.Millisecond) | ||
gresp,err := http.Get(ApiUrl + "/res.php?id=" + id) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
bodydata,err = ioutil.ReadAll(gresp.Body) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
bodyresult = nil | ||
err = json.Unmarshal(bodydata, &bodyresult) | ||
if err != nil { | ||
log.Fatal(err) | ||
} | ||
if bodyresult["status"] == "error" { | ||
log.Fatal(fmt.Errorf("server error")) | ||
} | ||
if bodyresult["status"] == "ok" { | ||
fmt.Println(bodyresult["text"]) | ||
break | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
sea english text below | ||
# cloudvis | ||
простой консольный клиент для сервиса CloudVision (https://visionbot.ru). | ||
использование: cloudvis опции файл | ||
файл - имя файла изображения в формате png или jpg. | ||
поддерживаемые опции: | ||
-l language | ||
указывает, какой язык использовать, имя языка задаётся в виде двухбуквенного кода, например ru или en. поумолчанию en. | ||
список поддерживаемых языков см. на сайте сервиса. | ||
-stdin | ||
читать изображение со stdin вместо файла. | ||
-t type | ||
указывает тип данных для распознавания. может быть text, image или all. поумолчанию all. | ||
готовые исполняемые файлы для windows вы можете найти в разделе releasies репозитория. | ||
## сборка | ||
требования: | ||
среда разработки [golang](https://golang.org) | ||
тестировалось на go 1.14.1 | ||
дополнительные пакеты не требуются | ||
|
||
затем | ||
go get github.com/ilyapashuk/cloudvis | ||
|
||
процесс распознавания осуществляется в облаке при использовании [этого](https://visionbot.ru) сервиса. | ||
это приложение не осуществляет какую-либо обработку загружаемых изображений, поэтому обо всех ошибках, связанных с некорректным распознаванием, следует сообщать напрямую [разработчику](mailto:aleks-samos@yandex.ru) сервиса. | ||
обратите также внимание, что хотя распознавание текста работает достаточно хорошо, не стоит полностью доверять результату в вопросе распознавания предметов. | ||
|
||
в своей работе приложение использует следующий api: | ||
https://visionbot.ru/apiv2 | ||
|
||
## english | ||
simple console client for CloudVision service (https://visionbot.ru). | ||
Usage: cloudvis opts file | ||
file is a image file name. png and jpg are officially supported. | ||
Opts can be one of: | ||
-l language | ||
set language name to use. language is formed as two letter code, like ru or en, default is en. (default "en") | ||
-stdin | ||
get image data from stdin, filename will be ignored | ||
-t type | ||
data type to recognize. can be 'text', 'image' or 'all'. (default "all") | ||
precompiled binaries for windows can be found in releases section | ||
## build | ||
requirements: | ||
[golang](https://golang.org) build environment. | ||
tested on go 1.14.1 | ||
no any additional packages required. | ||
|
||
then | ||
go get github.com/ilyapashuk/cloudvis | ||
|
||
all recognition computations are made in the cloud by [this](https://visionbot.ru) service. | ||
this app don't makes any preprocessing for images, so all wrong recognition issues should be passed to [service's [developer](mailto:aleks-samos@yandex.ru) | ||
|
||
in it's work this app uses following api: | ||
https://visionbot.ru/apiv2 |