ユニファ開発者ブログ

ユニファ株式会社プロダクトデベロップメント本部メンバーによるブログです。

開発者ブログ二周年&2018年人気記事ランキング

 みなさまこんにちは、赤沼です。あと数日で2018年も終わってしまいますね。ちょっと前に年が明けたと思ったらもう年末で、一年なんてあっという間です。まだまだ終わってもらっちゃ困るとも思いつつ、そうは言っても時は平等に過ぎて行くので、同じ時間の中でもレバレッジを効かせられるように動いて行きたいと思う今日この頃です。

 そんな中、この開発者ブログも今月で開設から二周年を迎えました。ご覧いただいている皆様、ありがとうございます。開始当初は続くかどうかわかりませんでしたが、だいたい週一本ペースでなんとか途切れることなく続いてきました。来年も変わらずアクティブに更新していけるようにしたいなと思いつつ、年末ということもありますので2018年に人気のあった記事をランキングしてみました。上位5本を紹介してみたいと思います。

No. 1: Perceptual Hashを使って画像の類似度を計算してみる

 画像の解析というと最近は機械学習や深層学習というイメージですが、こちらは各画像データからHashを計算し、その値の近さで類似度を判断するというものです。

tech.unifa-e.com

No. 2: iOSのCoreBluetoothの実装をしてみる

 最近はIoTデバイスも増えてきて、BLEでスマートフォンと連携しているものも多くなってきています。こちらは iOS で BLE の Central と Peripheral の実装をした記事になります。

tech.unifa-e.com

No. 3: イメージで覚えるReact + Redux

 フロントエンドの実装についてはデファクトと言えるものがなかなか決まらない状況ですが、その中でも React はポジションを得てきている気がしています。こちらは Rails と React, Redux を組み合わせての実装を紹介した記事になります。

tech.unifa-e.com

No. 4: Swift 4 で UserDefaults を簡単に扱う

 こちらは iOS の UserDefaults を、Kotlin の SharedPreferences と同じように簡単に扱う方法を紹介した記事です。

tech.unifa-e.com

No. 5: td-agent(Fluentd) を利用したログ収集

 ログ収集といえば Fluentd がかなり使われているかと思いますが、ユニファでの Fluentd(td-agent)を使用してのログ収集方法を紹介した記事になります。

tech.unifa-e.com

 開発者ブログは開発メンバーが持ち回りで書いているので、記事のジャンルも様々ですが、その中でも画像解析系やiOS、 IoT関連、インフラ関連の記事の注目度が比較的高かったようです。この辺りの領域はユニファのサービスにも密接に関係するところでもあり、関心を持っていただけていることは嬉しいですね。今年の年初からはR&Dチームも立ち上げて活動していますので、画像解析等は今後さらに力を入れていきたいと思っています。

まとめ

 ブログ二周年ということで、はてなブログのプロアカウントの契約も更新しましたし、最近では Podcast(UniFa Developer's Podcast) の配信もゆるく始めましたので、さらに情報発信を多くしていけると良いかなと思っています。そんなわけで皆様2019年もユニファをよろしくお願いいたします。良いお年を。

刑務所長問題の続き

こんにちは、ヘルスケア事業部のちょうです。前回のクイズ問題はいかがでしょうか。

実はその問題、続きがあります。(前回の問題分からなくてもオーケーです。条件はまったく新しくなりますので)

「The Art of Multiprocessor Programming」第一章 問題5

The same warden has a different idea. He orders the prisoners to stand in line, and places red and blue hats on each of their heads. No prisoner knows the color of his own hat, or the color of any hat behind him, but he can see the hats of the prisoners in front. The warden starts at the back of the line and asks each prisoner to guess the color of his own hat. The prisoner can answer only “red” or “blue.” If he gives the wrong answer, he is fed to the crocodiles. If he answers correctly, he is freed. Each prisoner can hear the answer of the prisoners behind him, but cannot tell whether that prisoner was correct.

The prisoners are allowed to consult and agree on a strategy beforehand (while the warden listens in) but after being lined up, they cannot communicate any other way besides their answer of “red” or “blue.” Devise a strategy that allows at least P − 1 of P prisoners to be freed.

続きを読む

RailsをAmazon ECS(AWS Fargate)で運用する際のログ設定で工夫した点

こんにちは、Webエンジニアの本間です。

今回、Railsアプリケーションを Amazon ECS、しかも AWS Fargate の上で運用する機会に恵まれました。 その中でログに関する話を書こうと思います。

というのも、これまでのEC2インスタンス上でのログと、ECSでのログでは扱いが大きく異なっており、色々と注意&工夫しないと障害調査等で苦労することがわかったためです。 従来から変更しないといけない点、それを見据えて工夫した点をばーっと書いていきたいと思います。

続きを読む

JAWS-UG横浜 #14 AWS re:Invent 2018 RecapのLT枠で参加して初LTしてきました

こんばんは!
ユニファでインフラ担当していて、
LT後の懇親会に参加し終電間違えてしまい深夜バスで帰りながらこのブログ書いてる… . すずきです…

先週AWS re:inventがありましたね! 私は日本にいましたがいろんな新サービス、アップデートがありとてもワクワクしました。 数が多くて全然追えていませんが…

そんな中本日「宇宙一早いAWS re:Inventふりかえりイベント」に参加してきました。 今回LT枠で参加したのは @ijin さんにどこかでLTしてみなよとアドバイスもらっていて、 ちょうどre:inventがあり、本イベントがあったのとLT枠がなんとか余っていたので申し込ませていただきました。

では本題

続きを読む

Network.framework を使った TCP Socket 通信してみる

こんにちは、iOSエンジニアのしだです。
今回は iOSエンジニアらしく、iOS12 から追加された Network.framework を使ってTCP Socket でチャットアプリを作ってみます。
この前、iOSアプリで TCP Socket を経由して画像を取ってくる必要が出てできて、めんどくさいなーどうしようかなーと考えてたら同僚に iOS12 から Network.framework が追加されたよと教えてもらったので実際に使ってみました。

準備

  • Xcode 10.1
  • Swift 4.2.1
  • NIOChatServer
続きを読む

手形のサイズを自動で計測する

R&Dエンジニアの浅野です。先日ユニファの仲間から「手形の写真からサイズは自動的に分からないの?」と相談を受けました。最近のスマートフォンにはAR技術を使って長さなどを測る機能がありますが、始点終点を定める手間があるのと精度がまだ不安です。大きさの参照となるものが一緒に写っているなら写真だけ撮っておけば後は自動で測定できるはず、ということで今日はその仮説を検証してみたいと思います。

準備

f:id:unifa_tech:20181109150725j:plain:w180:right
前提として、大きさの分かっている紙(今回はA4用紙)に手形が押してあるとします。娘に協力してもらい、手の縁取りをして色鉛筆などで塗りつぶしてもらったものを撮影しました。サイズをできるだけ正確に測る上でポイントとなりそうなのが、手形が必ずしも真上から撮影されるわけではないことと、手の向きが必ずしも台紙に対して真っ直ぐではないことです。

処理開始

AI全盛の時代なので、深層学習で手形の部分をセグメンテーションして・・・といきたいところですが、基準となる性能を理解する上でも最初はできるだけシンプルな方法でやってみるのが得策です。まずはカメラの角度によって用紙が台形に見えてしまっている部分に対処していきます。このままでは縮尺が歪んでいるため正しく大きさを知ることができないからです。基本方針として、用紙の四隅がどこにあるかを検出してそれを長方形に補正することにします。

人間は簡単に四隅を見つけることができますが、ソフトウェアでそれを実現するにはいくつかのステップを踏む必要があります。具体的には、まず画像をグレースケールに変換した後に二値化という処理を行います。二値化とは、ある閾値以上の輝度をもつ画素を白に、下回る画素を黒に強制的に変換することをいいます。そうすることで台紙の輪郭を抽出することが容易になります。

f:id:unifa_tech:20181109155239j:plainf:id:unifa_tech:20181109155258j:plainf:id:unifa_tech:20181109155310j:plainf:id:unifa_tech:20181109155324j:plain
グレースケール変換から2値化を経て台紙の輪郭が検出できた。

台形補正から手形領域の検出へ

f:id:unifa_tech:20181109162339j:plain:w300:left 輪郭がわかると四隅の座標を計算で求めることができます。するとその座標から射影変換という手法を使って台形に写っていた部分を長方形に補正することが可能となります。これで縮尺が正しくなったので、続いて手形の部分を検出してその大きさを推定するという作業に移っていきます。

手形の輪郭抽出には先ほどと同様にグレースケール変換や二値化を活用していきます。二値化処理は単純なように見えますが、実は輝度ムラやノイズの影響を受けやすいため、様々な環境で撮影された画像に対して精度良く働くようにする部分はエンジニアとしての腕が試されるところです。さて、うまく輪郭を捉えることができると手形の大きさの推定まであと一歩です。

f:id:unifa_tech:20181109160457j:plainf:id:unifa_tech:20181109160721j:plainf:id:unifa_tech:20181109160508j:plainf:id:unifa_tech:20181109160516j:plain
台形補正から上記と類似の変換を経て手形の輪郭が抽出できた

いよいよサイズ推定へ。

f:id:unifa_tech:20181109160732j:plain:w200:right 最終段階になって立ちはだかるのが、最初に挙げたポイントの二つ目です。手が台紙に対して真っ直ぐである保証はないため、単純に縦方向の座標の最大値から最小値を引けばよい、というわけにはいきません。主成分分析やパターンマッチングなどを使って手の向きを推定するという方向性もありますが、ここは検出した輪郭の外接円を描き、その直径を手形のサイズとする、という方針にしたいと思います。そうすることで手の向きを気にする必要がなくなります。後は得られた直径を台紙の大きさと比較して実際のサイズを算出します。この方法で推定された大きさは14.0cm。それに対して自分で定規で実測した値は約13.8cmでした。なかなか良い精度です!

人間が測るときにはどこに定規をあてればいいのか結構迷いますし、だからこそ人によって結果にばらつきがでそうです。それを考えるといつも同じ尺度で計測できるというのもソフトウェアで実行する利点の一つですね。

最後に

当初の目的であった仮説の検証は無事できましたが、もし仮にサービス化まで見据えると技術的な部分だけでも引き続き考えたいことはたくさんあります。

  • 絵の具を使った手形で指と手の平が 離れたり部分的にかすれたりしたときにどう処理すべきか?
  • この手形が誰のものかどうやって対応づけるか? 名前を一緒に書いてもらって文字認識をする?
  • そもそも所定の大きさの台紙を使うというのは許容されるのか? 切り取ったり飾りつけた後に写真を撮りたいのでは?
  • 写真に手形が写っていると(それこそ深層学習で)認識して、サイズ計測モードに自動で移行できたらかっこいい!

どれも簡単なものではありませんが、だからこそやりがいがある内容です。技術的にできる/できない、お客様に刺さる/刺さらない、ビジネスになる/ならない、様々な葛藤を乗り越えて世に送り出したものが受け入れられて役に立ったときの言葉にならない喜び。これがあるからエンジニアはやめられません。

保育の世界を変えるエンジニア募集中

弊社では一緒に働く仲間を大募集中です。少しでも興味を持たれた方はぜひ声をかけてください! ユニファ 株式会社の採用/求人 | 転職サイトGreen(グリーン)