iQON::BackEnd iQONエンジニアセミナー by VASILY (Backendチーム)

4,303 views

Published on

0 Comments
11 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,303
On SlideShare
0
From Embeds
0
Number of Embeds
2,909
Actions
Shares
0
Downloads
11
Comments
0
Likes
11
Embeds 0
No embeds

No notes for slide

iQON::BackEnd iQONエンジニアセミナー by VASILY (Backendチーム)

  1. 1. iQON::BackEndiQONの裏側を支える技術と今後の展望
  2. 2. むらた たくろう村田 卓朗• Engineer(BackEnd & Android)• @6rats on Twitter• Ruby:3年 / PHP:4年 / Java:1年• 興味 => OpenCV / Android
  3. 3. 目次• iQONの裏側を支える技術• Backendのプロダクト紹介 • 商品検索エンジン • コーディネート作成API• 今後やりたいこと
  4. 4. iQONの裏側を支える技術
  5. 5. Backendのプロダクト紹介今回は以下の2点に絞って紹介します • 商品検索エンジン • コーディネート作成API
  6. 6. 商品検索エンジンさまざまなファッションECの商品情報を収集し iQON上での検索を実現しています
  7. 7. 商品情報の収集さまざまなECサイトをクロールして 商品情報を収集しています Crawler EC iQON ※ECサイトの許可はとってあります
  8. 8. 商品情報の収集• 独自のクローラフレームワークを実装• ECサイトごとの商品ページのXPATHと 検索ページのURLなどを指定するだけ
  9. 9. クローラの主な役割• ECサイトのページの解析• 画像処理• インデックスの更新• 値段の更新&通知
  10. 10. クローラの主な役割• ECサイトのページの解析• 画像処理• インデックスの更新• 値段の更新&通知
  11. 11. ECサイトのページ解析 商品名 価格 キャプション ブランド 画像 etcEC HTML Crawler
  12. 12. ECサイトのページ解析ECサイトごとに以下のようなクラスを用意しますclass ElleAnalyzer < Analyzer def initialize super @detail_page_url_regexps = [//web/commodity/[d]+/[d]+//] @paging_param_name = "currentPage" @list_page_url = "http://elleshop.jp/web/app/catalog/list/init?searchWord=&currentPage=1" @xpaths = { "src" => "//ul[@id=zoomPhoto]/li[1]/a//img", "name" => "//div[@id=itemSummary]//span[@class=productName]", "description" => ["//div[@id=itemDesc]//div[@class=desc]//dl[1]//dd[1]"], "brand" => ["//div[@id=itemSummary]//a[@class=brandName]"], "category" => "//ul[@id=topicpath]/li[4]/a", "price" => "//div[@class=price]/dl[1]/dd[1]//span[1]", "discount_price" => "//div[@class=price]/dl[1]/dd[2]/strong", "sku_id" => "//div[@id=itemSummary]/div[1]/p/span" } end def before_default_parse @values["src"] = "http://elleshop.jp" + @doms["src"].first.attributes()["src"] endend
  13. 13. ECサイトのページ解析crawler = Crawler.newcrawler.setAnalyzer(ElleAnalyzer.new)crawler.run
  14. 14. クローラの主な役割• ECサイトのページの解析• 画像処理• インデックスの更新• 値段の更新&通知
  15. 15. 画像処理 透過処理 色判定 #A5805B画像の処理にはImageMagickをラッピングした RMagickを利用しています
  16. 16. クローラの主な役割• ECサイトのページの解析• 画像処理• インデックスの更新• 値段の更新&通知
  17. 17. インデックスの更新 検索に必要なデータ Solr 検索機能を提供EC Crawler API MySQL 表示用など商品データの詳細
  18. 18. クローラの主な役割• ECサイトのページの解析• 画像処理• インデックスの更新• 値段の更新&通知
  19. 19. 値段更新&通知 更新 Crawler MySQL & Solr LIKEしたアイテムが 値下げしました!¥5,900 ¥3,900
  20. 20. コーディネート作成API
  21. 21. コーディネート作成API Coordinate API
  22. 22. コーディネート作成API json iOS App [{id:1234, x:100, y: 150, index:1,w: 100,h:150,affine: [1,0,0,1,0,0]}, Android App Coordinate {id:2934, x:100, y: API 150, index:2,w: 52,h:98,affine: [1,0,0,1,0,0]}, PC & ...]SmartPhone Web
  23. 23. コーディネート作成API#キャンバスオブジェクトの初期化@canvas = Magick::Image.new(CANVAS_SIZE, CANVAS_SIZE) { self.background_color = "none" self.format = "png"} #アイテム画像のダウンロードimg_path = iQONImage.download(item_id)#アイテム画像オブジェクトの生成item = Magick::Image.read(img_path).firstitem.resize_to_fit!(w, h)matrix = Magick::AffineMatrix.new(affine_matrix)item.affine_transform(matrix)#アイテム画像オブジェクトをキャンバスに配置@canvas.composite!(item, x, y, Magick::OverCompositeOp)
  24. 24. コーディネート作成API download Coordinate API一度ダウンロードした画像はロー 透過処理済みの商品 カルにキャッシュとして保存 画像をダウンロード
  25. 25. コーディネート作成API エディター コーディネートの作成機能 をユーザに提供する アプリケーションサイドの 実装
  26. 26. コーディネート作成API 480px 480px アプリケーション側の エディターは常に640px 480px×480pxのキャンバ スとは限らない
  27. 27. 今後やりたいこと 処理するデータ量が増える速度は 日々速くなってきています画像処理だけでなく大量のデータを高 速に処理することも求められます
  28. 28. 今後やりたいこと• データマイニング、レコメンドエンジン の開発• 顔認識、マネキン認識、商品画像透過 処理の精度向上など画像処理
  29. 29. ありがとうございました!気軽に声掛けてください!

×