c4j 政治家データベース
ゴール
政治家にスマホをかざすと、顔認識して、その人物の政治的ポリシーや公約違反や過去の問題行動などがわかる
政治家同士や政治家と企業の関係性をネットワーク可視化する
実装方針
サーバーサイド
政治家データベースを作る
wikidataを元にする
wikidataのIDをmodelに持っておく
技術構成
MongoDB + mongoid + Ruby on Rails APIモード
なぜ?
MongoDBによるマイグレーション不要開発したい
mongoidが非常に良くできているからruby使いたい
いろいろ細かいことを考えなくても使えるのでRailsのAPIモードを使う
ネットワーク可視化
APIからグラフ構造を取得する
可視化ライブラリでつながりを可視化する
顔認識
機械学習モデル構築
日本の政治家の写真を大量に集める
顔と思われる部分だけを切り出す
顔認識できるように機械学習する
アプリ開発
カメラ入力から顔認識する
政治家データベースから政治的情報を取得する
カメラ入力画像にアノテーションする
開発メモ
2021/4/15
rails new politician-detector --api --skip-active-record --skip-bundle
mongoidを使うので、ActiveRecordを除外してrails newしている
Gemfileに以下を追加
mongoidだけではhas_secure_password, has_secure_tokenが使えないので、ActiveModelとActiveModel::SecureTokenを使う
code:Gemfile
gem 'bcrypt', '~> 3.1.7'
...
gem 'rack-cors'
...
gem 'mongoid'
gem 'activemodel'
gem 'active_model_secure_token'
bundle install
mongoidが入っているとscaffoldコマンドも自動的にmongoidでModelを生成してくれるので以下を実行
rails g scaffold politician name:string
rails g scaffold user name:string, email:string, password_digest:string, token:string
Userモデルにバリデーションなどを追加
Userコントローラーにloginメソッドを追加
Userコントローラーでto_json時にpassword_digestやtokenを出力しないように変更
Applicationコントローラーにrequire_loginメソッドを追加
Helloコントローラーを追加、before_action: :require_loginを指定
routes.rbに/users/loginと/helloを追加、動作確認
とりあえず基本的な骨組みと認証はできたのでGitHubに公開
ToDo
DevOps
bundlerに対応する
docker-compose upで動かせるようにする
rubocopの導入
CIの整備
本番用MongoDBの用意
リリース方針や運用を考える
実装
CORS対策
モデル設計
モデル設計
Politician(政治家)
name
wikidata_id
twitter_id
gender
birth_day
birth_place
has_many Opinion
has_many PoliticianToEducation
has_many PoliticianToElection
has_many PoliticianToPoliticalParty
Opinion(意見)
text
source
belongs_to Politician
Education(学校)
name
has_many PoliticianToEducation
PoliticianToEducation(政治家の学歴)
belongs_to Education
belongs_to Politician
Election(選挙)
name
has_many PoliticianToElection
Manifest(公約)
text
source
belongs_to PoliticianToElection
PoliticianToElection(政治家の選挙歴)
belongs_to Election
belongs_to Politician
has_many Manifest
PoliticalParty(政党)
name
has_many PoliticianToPoliticalParty
PoliticianToPoliticalParty(政治家の政党所属歴)
belongs_to PoliticalParty
belongs_to Politician
code:politician.json
{
"name": ...,
"political_parties": [
{
"name": ...
},
]
"elections": [
{
"name": ...
}
]
}
参考事例
https://gyazo.com/e25630246bced62fced20a302171f4e5
https://gyazo.com/eae00bcd710011f9b8ba2564ce14db38