JPC2018[H4]マイクロソフトの Azure オープン ソース戦略とパートナー エコシステムMPN Japan
サティア・ナデラの CEO 就任以降、近年急速に進んでいる Azure オープン ソースの取り組みについてご紹介します。ビッグデータ、AI、コンテナ、DevOps、どれも最近よく耳にするバズワードかと思います。新興 SI パートナーの株式会社オルターブースから小島様、クリエーションライン株式会社から安田様をお迎えし、過去の事例を踏まえながら Microsoft Azure の OSS 戦略について対談します。パートナー様の観点からマイクロソフトに思うことや、今後期待すること、パートナー様が集うイベントだからこそのぶっちゃけトークにご期待ください。
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matchingharmonylab
公開URL:https://arxiv.org/pdf/2404.19174
出典:Guilherme Potje, Felipe Cadar, Andre Araujo, Renato Martins, Erickson R. ascimento: XFeat: Accelerated Features for Lightweight Image Matching, Proceedings of the 2024 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) (2023)
概要:リソース効率に優れた特徴点マッチングのための軽量なアーキテクチャ「XFeat(Accelerated Features)」を提案します。手法は、局所的な特徴点の検出、抽出、マッチングのための畳み込みニューラルネットワークの基本的な設計を再検討します。特に、リソースが限られたデバイス向けに迅速かつ堅牢なアルゴリズムが必要とされるため、解像度を可能な限り高く保ちながら、ネットワークのチャネル数を制限します。さらに、スパース下でのマッチングを選択できる設計となっており、ナビゲーションやARなどのアプリケーションに適しています。XFeatは、高速かつ同等以上の精度を実現し、一般的なラップトップのCPU上でリアルタイムで動作します。
セル生産方式におけるロボットの活用には様々な問題があるが,その一つとして 3 体以上の物体の組み立てが挙げられる.一般に,複数物体を同時に組み立てる際は,対象の部品をそれぞれロボットアームまたは治具でそれぞれ独立に保持することで組み立てを遂行すると考えられる.ただし,この方法ではロボットアームや治具を部品数と同じ数だけ必要とし,部品数が多いほどコスト面や設置スペースの関係で無駄が多くなる.この課題に対して音𣷓らは組み立て対象物に働く接触力等の解析により,治具等で固定されていない対象物が組み立て作業中に運動しにくい状態となる条件を求めた.すなわち,環境中の非把持対象物のロバスト性を考慮して,組み立て作業条件を検討している.本研究ではこの方策に基づいて,複数物体の組み立て作業を単腕マニピュレータで実行することを目的とする.このとき,対象物のロバスト性を考慮することで,仮組状態の複数物体を同時に扱う手法を提案する.作業対象としてパイプジョイントの組み立てを挙げ,簡易な道具を用いることで単腕マニピュレータで複数物体を同時に把持できることを示す.さらに,作業成功率の向上のために RGB-D カメラを用いた物体の位置検出に基づくロボット制御及び動作計画を実装する.
This paper discusses assembly operations using a single manipulator and a parallel gripper to simultaneously
grasp multiple objects and hold the group of temporarily assembled objects. Multiple robots and jigs generally operate
assembly tasks by constraining the target objects mechanically or geometrically to prevent them from moving. It is
necessary to analyze the physical interaction between the objects for such constraints to achieve the tasks with a single
gripper. In this paper, we focus on assembling pipe joints as an example and discuss constraining the motion of the
objects. Our demonstration shows that a simple tool can facilitate holding multiple objects with a single gripper.
115. app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
シラサギの構成 Routing
config/routes/article/routes.rb
116. app/controllers
app/models
app/views
config/locales
config/routes
config/routes.rb
config/routes/article/routes.rb
ルーティング追加ブロック
管理画面 content
公開画面 node, page, part
※namespaceの拡張
シラサギの構成 Routing
SS::Application.routes.draw do
…
content "article" do
get "/" => redirect { |p, req| "#{req.path}/pages" }, as: :main
get "generate" => "generate#index“
post "generate" => "generate#run“
resources :pages, concerns: [:deletion, :copy, :move, :lock]
end
…
node "article" do
get "page/(index.:format)" => "public#index", cell: "nodes/page“
get "page/rss.xml" => "public#rss", cell: "nodes/page", format: "xml“
end
part "article" do
get "page" => "public#index", cell: "parts/page"
end
page "article" do
get "page/:filename.:format" => "public#index", cell: "pages/page“
end
end
config/routes/article/routes.rb
118. シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
119. シラサギの構成 Routing 管理画面
content "article" do
resources :pages
end
Ex. 管理画面
記事一覧: http://demo.ss-proj.org/.demo/article1/pages
記事詳細: http://demo.ss-proj.org/.demo/article1/pages/28
article_pages GET /.:site/article:cid/pages(.:format) article/pages#index {:cid=>/w+/}
POST /.:site/article:cid/pages(.:format) article/pages#create {:cid=>/w+/}
new_article_page GET /.:site/article:cid/pages/new(.:format) article/pages#new {:cid=>/w+/}
edit_article_page GET /.:site/article:cid/pages/:id/edit(.:format) article/pages#edit {:cid=>/w+/}
article_page GET /.:site/article:cid/pages/:id(.:format) article/pages#show {:cid=>/w+/}
PATCH /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
PUT /.:site/article:cid/pages/:id(.:format) article/pages#update {:cid=>/w+/}
DELETE /.:site/article:cid/pages/:id(.:format) article/pages#destroy {:cid=>/w+/}
/.:site/article:cid
pages
120. シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
121. シラサギの構成 Routing 公開画面
node "article" do … end
part "article" do … end
page "article" do … end
article_node GET /.:site/nodes/article/page(/index.:format) cms/public#index {:cell=>"nodes/page"}
article_part_page GET /.:site/parts/article/page(.:format) cms/public#index {:cell=>"parts/page"}
GET /.:site/pages/article/page/:filename.:format cms/public#index {:cell=>"pages/page"}
Ex. 公開画面
記事一覧フォルダー: http://demo.ss-proj.org/docs/
記事ページ: http://demo.ss-proj.org/docs/30.html
cms/public#index cell: " nodes/page " とは?
138. ブログページ作成
Blog Page Model
app/models/blog/page.rb
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
139. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Cms::Model::Page
app/models/concerns/cms/model/page.rb
DB の Collection は cms_pages に
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Cms::Model::Page
140. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• include Addons
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
…
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Addons
141. ブログページ作成
Blog Page Model
app/models/blog/page.rb
• default_scope
where(route: "blog/page")
route: コンテンツを識別する値
"blog/page" ブログ/ブログページ
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
default_scope
160. 天気入力フォーム作成
Blog Weather Addon
app/models/concerns/blog/addon/weather.rb
• 天気アドオン
module Blog::Addon
module Weather
extend ActiveSupport::Concern
extend SS::Addon
included do
field :weather, type: String
permit_params :weather
public
def weather_options
[ ["晴れ", "sunny"], ["曇り", "cloudy"],
["雨", "rain"], ["雪", "snow"], ]
end
end
end
end
field
161. 天気入力フォーム作成
Blog Page Model
app/models/concerns/blog/addon/weather.rb
app/models/blog/page.rb
• 天気アドオンをページに追加
class Blog::Page
include Cms::Model::Page
include Cms::Addon::Meta
include Cms::Addon::Body
include Cms::Addon::File
include Cms::Addon::Release
include Cms::Addon::RelatedPage
include Category::Addon::Category
include Workflow::Addon::Approver
include Blog::Addon::Weather
before_save :seq_filename, if: ->{ basename.blank? }
default_scope ->{ where(route: "blog/page") }
private
def validate_filename
(@basename && @basename.blank?) ? nil : super
end
def seq_filename
self.filename = dirname ? "#{dirname}#{id}.html" : "#{id}.html"
end
end
Include weather addon
173. 一覧フォルダー作成
Blog Node Model
app/models/blog/node.rb
• ブログ一覧フォルダー
module Blog::Node
class Base
include Cms::Model ::Node
default_scope ->{ where(route: /^blog//) }
end
class Page
include Cms::Model ::Node
include Cms::Addon::PageList
default_scope ->{ where(route: "blog/page") }
end
end
174. 一覧フォルダー作成
Blog Agents Nodes/Page Controller & View
app/models/blog/node.rb
app/controllers/blog/agents/nodes/page_controller.rb
• 公開側コントローラー
class Blog::Agents::Nodes::PageController < ApplicationController
include Cms::NodeFilter::View
helper Cms::ListHelper
Public
def pages
Blog::Page.site(@cur_site).public(@cur_date).
where(@cur_node.condition_hash)
end
def index
@items = pages.
order_by(@cur_node.sort_hash).
page(params[:page]). per(@cur_node.limit)
render_with_pagination @items
end
end