Qstairs

現役AIベンチャーCTOの知見、画像認識(人工知能、Deep Learning)を中心とした技術ノウハウをアップしていきます

広告

【顔検出】超簡単PythonとOpenCVを使った顔検出

はじめに

最近ではコモディティ化したといえる顔認識技術。
顔認識技術では一般的に
顔検出(どこに顔があるか)→顔照合
という流れで登録済みの顔を特定しています。

今回は顔検出を超簡単にPythonOpenCVを用いて実現しました。
(なんと118行!)

ソースコード

今回作成したコードは以下になります。
事前にPython(pipenv)環境が整っていれば3ステップで顔検出可能になります。

github.com

使用した技術

OpenCVに搭載されているdnnライブラリを使い、
学習済みの顔検出用caffeモデルを用いて顔を検出しています。

顔検出前:

顔検出結果:

最後に

顔検出だけで何か面白いものを作るのは難しいかもしれませんが、
他の技術やサービスと組み合わせてみると良いかもしれません。
例えば、SNSに画像をアップするためのモザイク処理や
Alexaスキルと連携して顔をみつけたら挨拶する(つまらない。。。)等でしょうか。

何にせよ、こんなに簡単に顔検知を実装できる時代って便利ですね。

これからITエンジニアを目指す人が覚悟すべき重要3ポイント

はじめに

ここ1年でITエンジニアにジョブチェンジしようと考えている人がかなり多くなっています。 既に華麗にジョブチェンジできた方も出てきているでしょう。 まだどうすべきか迷っている方も多いのではないでしょうか?

私としてはより多くITエンジニアが増えることを望んでいますし、 ITエンジニアになって良かったと思える人が多いことを願うばかりです。 ただ、ITエンジニアで食い続けることはそんなに楽ではないということも知っておいてほしいと考えています。

ということで、今回は現役CTOの私が考える、これからITエンジニアを目指す人が覚悟すべき重要3ポイントを挙げようと思います。

これからITエンジニアを目指す人が覚悟すべき重要3ポイント

  • 習うより慣れよだよ
  • 勉強し続けなければならないよ
  • 技術だけでは年収は頭打ちだよ(一部の天才エンジニアは除く)

習うより慣れよだよ

頭の中で論理を組み立てていくという点でプログラミングは将棋に似ています。 なので、将棋を勉強しているだけで実際に打たない人が強くなることは無いように、 ITエンジニアも知識だけ習得していては成長しません。 少しでも多くコードを書く人が強くなります。 また、実際にコードを書いていると多くの壁にぶつかります。 そういった壁の乗り越え方を実践していくことで強くなっていきます。 まるで筋繊維が切れて筋肉が大きくなるかのように。

とはいえ、知識は必要になるので勉強はしましょう。

勉強し続けなければならないよ

15年前にはiOSAndroidアプリ開発者はいなかった 10年前にAWSを使っている開発者はほとんどいなかった 5年前ではAIが民衆化しておらず扱える開発者はほんの一部だった

このように、次にどのような技術が流行するかわからないのがITの世界で、 ITエンジニアは都度習得・理解していく必要が出てきます。 習得していかない人は食いっ逸れることは少ないかもしれませんが、収入が上がりにくくなるでしょう。

とはいえ、新しいモノ好きでないと勉強し続けることはかなり大変です。。 なので、自分には厳しいかなと思ったらPM等、IT知識が多少あればこなせるポジションに移ることもありと思います。(最近ではエンジニアよりマネージャー職がかなり不足しています。)

技術だけでは年収は頭打ちだよ(一部の天才エンジニアは除く)

これまでの開発は分業度合い(営業、業務設計、システム設計、実装等)がかなり強くありました。 しかし、これから社会の流れが加速する中で分業していくと時間がかかりすぎてしまいます。 それぞれの境界線が薄くなっていき、マルチで仕事を遂行できる人の重要性が高くなっていきます。

この点、ジョブチェンジの方は有利です。 現在の仕事の知識・ノウハウを持ってITエンジニアになるので、 関連する業界、事業を顧客に持つ企業に携わると重宝されるでしょう。 ITエンジニアは良くも悪くもオタク気質が強い人が多いので、 差別化して収入アップできると考えています。

最後に

今回は現役CTOの私が考える、これからITエンジニアを目指す人が覚悟すべき重要3ポイントを挙げました。

少し脅しのように感じる方もいるかもしれませんが、 私としてはより多くITエンジニアが増えることを望んでいますし、 ITエンジニアになって後悔する人が出てきてほしくないと思っています。

とりあえずITエンジニアに挑戦し、自分に向いてなければ以前の業種に戻っても良いと思います。 少なくともITに関する知識は増えていると思うので、 マイナスにはならないでしょう。

人生100年時代。色々挑戦していきましょう!

【Docker】/home/****/.docker/config.json: permission deniedが発生したらやること

Ubuntu 18.04LTSにて、
docker ps
等のコマンドで以下が発生した。

WARNING: Error loading config file: /home/****/.docker/config.json: open /home/****/.docker/config.json: permission denied
上記「****」はユーザー名

その場合は、以下を実行しましょう。

sudo chown ${USER}:${USER} /home/vaak/.docker/config.json

他のサイトで以下のようにして対応している方もいるようですが、
誰でもアクセスできるようにはセキュリティ的にしない方が良いです。
(というか、777を設定すれば何とかなるという考え方が危険です。)

sudo chmod 777 /home/****/.docker/config.json

【DeepLearning】Tesla V100はCUDA9.0以上しか対応していない。だったらTensorflow1.5を使おう。

f:id:qstairs:20160601221351j:plain

最近、AI案件でAWSを扱い始めています。

処理速度が必要なので、AWSのp3インスタンスを使用していますが、
困ったことにp3のGPUはTesla V100でCUDA9.0以上しか対応していない!

Tensorflow1.4はターゲットはCUDA8.0なので、
ちゃんと動かないという非常事態が...
有志が作成したソースをビルドすれば良いという記事もあるがなかなかうまくいかず...

そんな時にTensorflow1.5がリリースされました\(^o^)/
Tensorflow1.5はCUDA9をサポートしているので早速インストール!

ちゃんと動きました。

【Python】WindowsでMiniconda, Anacondaで仮想環境を作成する際の注意点

f:id:qstairs:20160601221351j:plain

WindowsでMiniconda, Anaconda等で、
仮想環境を作成する際の注意点

以下コマンドで仮想環境を作成しようとすると、

conda create -n mykeras

以下のエラーが出ました。

Error: too few arguments, must supply command line package specs or --file

何やら引数が足りていないとのこと。

なので、以下のようにするとうまくいきます。

python 2.7を使用する場合

conda create -n mykeras python=2.7

python 3.5を使用する場合

conda create -n mykeras python=2.7

【Web】Laravelにまで手を付け始めました...

f:id:qstairs:20160601221351j:plain

はじめに

これまで、何度かWebアプリのフレームワークである
Ruby on RailsDjango
に関して使い方や実装方法を紹介してきました。

そして、なんと
Laravelにまで手を付け始めました。

知り合いのCTOの方にWebアプリの仕事のご依頼をいただき、
そのアプリがLaravelで動いているということでただいま勉強中です。

ということで、Laravelの環境構築からちょっと動かすところまでを紹介します。
#Ruby on RailsDjangoといったフレームワークを使用したことがある人向けです。

環境構築

今回はWindows10にインストールしているVirtualboxCentOSの6.8を構築し、
そこにPHPとLaravelをインストールしています。

インストールした感想は、
正直言ってわけわからない

というのもLaravelは人気があるようで、
インターネット上に構築方法が転がっているのですが、
どのバージョンでリリースしているのか明確に記載していなかったり、
構築方法の途中でフェードアウトしているサイトがあったり...

そんな中で私が参考にしたサイトは以下になります。
※といっても色々試しながら構築したので不十分かもしれません...

CentOSにPHP5.6をインストールする方法はこちら

CentOSにLaravelをインストールする方法はこちら

ちょっと動かす

Requestクラスの基本(1/5):初心者のためのLaravel入門を参考に
Laravel5.4での動かし方を記載します。


Web画面や処理を追加する際の肝になるのが
Djangoで言うところの「urls.py」に相当する「view.php」です。
ここに「Route::get」や「Route::post」を記載していきます。

// Laravel 5.4
Route::get('/helo/index', 'HeloController@getIndex');
Route::post('/helo/index', 'HeloController@postIndex');

上記の「HeloController」がファイル名で
「getIndex」が処理(メソッド)名になります。
これは「app/Controllers/HeloController.php」のようにファイルを用意し、
以下のように記述します。

<?php
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
use App\Http\Requests;
use App\Http\Controllers\Controller;
 
class HeloController extends Controller
{
    public function getIndex()
    {
        return view('helo', ['message' => 'Hello!']);
    }
    public function postIndex(Request $request)
    {
        $res = "you typed: " . $request->input('str');
        return view('helo', ['message' => $res]);
    }
}

return view('helo', ['message' => 'Hello!']);の
「'helo'」は画面処理のファイル名で
「resource/views/helo.blade.php」でファイルを作成することで紐づきます。
また、ファイル名に「.blade」を追加した目的は、
テンプレートエンジンを使えるようにするためです。
#下記の「{{ csrf_field() }}」がそれにあたります。

helo.blade.phpファイルの中身は以下になります。

<!doctype html>
<html>
<head>
    <title>Sample</title>
    <style>
    body { color:gray; }
    h1 { font-size:18pt; font-weight:bold; }
    </style>
</head>
<body>
<?php echo csrf_field(); ?>
    <h1>Sample</h1>
    <p><?php echo $message; ?></p>
    <form method="post" action="/helo/index">
      {{ csrf_field() }}
        <input type="text" name="str">
        <input type="submit">
    </form>
</body>

以上により、
localhost:8000/helo/indexへのアクセス
画面内の入力フォームの処理と結果の表示までが実現できます。


最後に

Laravelはバージョンによってフォルダ構成が大きく異なるので注意が必要です。
インターネットで調べる際はバージョンを確認しないとわけわからないことになります。

例えばLaravel5.1では存在したroutes.php
Laravel5.4ではroutesフォルダが設けられapi.phpやview.phpで分けられています。

5.1→Requestクラスの基本(1/5):初心者のためのLaravel入門
5.4→Laravel 5.4 (3)ルーティング基礎(認証) | ほぼWebエンジニアリング


これからさらに勉強していきます。

以上

【フリーランス】自宅作業になっての感想と1週間の活動について

f:id:qstairs:20171102004518j:plain

はじめに

自宅で作業するフリーランスのITエンジニアになって1週間以上たちました。

自宅作業はどんな感じか、どういう活動をしているのかつらつら書きます。

自宅作業

これまでは決められた時間にオフィスに行くために準備し、
オフィスに着き椅子に座りPCを立ち上げて仕事をすることが日常でした。

そんな日常から一転
今は決められた時間はなく、
オフィスは自宅で椅子に座りPCをスリープから起動し仕事をしています。

何が変わったか。
・行かなきゃいけないがない
・人に会う場合を除いて移動がない
  究極的に言えば起きてすぐ仕事できる!(良いことなのか!?)
・割り込み作業がないからやりたいようにできる
・パジャマで仕事
・歌いながら仕事
・いつでも休憩できる
・コンビニ店員にしか会わない


一歩間違えればニートですね。。。


自律的に行動できないと自宅作業はやめたほうがいいです。
自律的になるためには目標をちゃんと設定しなきゃですね。

目標がその日その日を支配する

横浜高校の野球部 渡辺前監督の言葉です。




活動

この一週間は慣れないことが多く大変でした。
ピッチイベントをはじめとし、
そこで出会った方々と改めてあってお話しすることが多かったです。
これまで仕事の中で面識の浅い人としっかり話すことが少なく、かつ人見知りなのでへとへとです。

でも、いろいろな方との繋がりを持てることはほんとにありがたいことです。
事業の進展にお力を貸してくれる方や、
これまでの経験を見込んで仕事を依頼してくれる方などに会うことでモチベーションが上がります。

現在SNS等が発展して直接会わなくてもコミュニケーションをとることはできますが、
だからこそ直接会うことの価値が高くなっているのではないでしょうか。

ITエンジニアの方には特にいろんな方に直接会ってほしいと思っています。
仕事取れますよ。

こんな私にお会いいただける方はTwitterでご連絡ください。
#東京、神奈川あたりになります。

以上

広告