Skip to content

Commit

Permalink
initial
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyapashuk committed May 11, 2020
0 parents commit e396418
Show file tree
Hide file tree
Showing 2 changed files with 154 additions and 0 deletions.
98 changes: 98 additions & 0 deletions cloudvis.go
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
}
}
}
56 changes: 56 additions & 0 deletions readme.md
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

0 comments on commit e396418

Please sign in to comment.