image_worker.rb 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. class ImageWorker
  2. def self.post(url, path, body={})
  3. uri = URI.parse(url)
  4. http = Net::HTTP.new(uri.host, uri.port)
  5. request = Net::HTTP::Post.new(path)
  6. request.add_field('Content-Type', 'application/json')
  7. request.body = body.to_json
  8. response = http.request(request)
  9. response.body
  10. end
  11. def self.new_image_service
  12. system("curl -X PUT 'http://#{ENV['API_HOST']}:8080/services/imageserv' -d '{\"mllib\":\"caffe\",\"description\":\"image classification service\",\"type\":\"supervised\",\"parameters\":{\"input\":{\"connector\":\"image\"},\"mllib\":{\"nclasses\":1000}},\"model\":{\"repository\":\"/opt/models/ggnet/\"}}'")
  13. end
  14. def self.predict_image(url)
  15. body = {"service"=>"imageserv", "parameters"=>{"input"=>{"width"=>224, "height"=>224}, "output"=>{"best"=>3}}, "data"=>["#{url}"]}
  16. uri = URI.parse("http://#{ENV['API_HOST']}:8080")
  17. http = Net::HTTP.new(uri.host, uri.port)
  18. request = Net::HTTP::Post.new("/predict")
  19. request.add_field('Content-Type', 'application/json')
  20. request.body = body.to_json
  21. response = http.request(request)
  22. response.body
  23. end
  24. def self.train_image(url, tags=[])
  25. body = {"service"=>"imageserv", "async"=>true, "parameters"=>{"mllib"=>{"gpu"=>false, "net"=>{"batch_size"=>32}, "solver"=>{"test_interval"=>500, "iterations"=>30000, "base_lr"=>0.001, "stepsize"=>1000, "gamma"=>0.9}}, "input"=>{"connector"=>"image", "test_split"=>0.1, "shuffle"=>true, "width"=>224, "height"=>224}, "output"=>{"measure"=>["acc", "mcll", "f1"]}}, "data"=>tags}
  26. uri = URI.parse("http://#{ENV['API_HOST']}:8080")
  27. http = Net::HTTP.new(uri.host, uri.port)
  28. request = Net::HTTP::Post.new("/train")
  29. request.add_field('Content-Type', 'application/json')
  30. request.body = body.to_json
  31. response = http.request(request)
  32. response.body
  33. end
  34. def self.ocr_image(url)
  35. uri = URI.parse("http://#{ENV['API_HOST']}:9292")
  36. http = Net::HTTP.new(uri.host, uri.port)
  37. request = Net::HTTP::Post.new("/ocr")
  38. request.add_field('Content-Type', 'application/json')
  39. request.body = {:img_url => url, :worker => "tesseract"}.to_json
  40. response = http.request(request)
  41. response.body
  42. end
  43. def self.create_services
  44. json = '{
  45. "service":"imageserv",
  46. "parameters":{
  47. "mllib":{
  48. "gpu":true
  49. },
  50. "input":{
  51. "width":224,
  52. "height":224
  53. },
  54. "output":{
  55. "best":3,
  56. "template":"{ {{#body}}{{#predictions}} \"uri\":\"{{uri}}\",\"categories\": [ {{#classes}} { \"category\":\"{{cat}}\",\"score\":{{prob}} } {{^last}},{{/last}}{{/classes}} ] {{/predictions}}{{/body}} }",
  57. "network":{
  58. "url":"your-elasticsearch-server.com/images/img",
  59. "http_method":"POST"
  60. }
  61. }
  62. },
  63. "data":["http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg"]
  64. }'
  65. result = system("curl -XPOST 'http://localhost:8080/predict' -d #{json}")
  66. end
  67. end