動画配信サーバを作ってみた
Google、Apple、Amazon、IT関連の大企業はみんな動画配信サービスを行っています。世の中に動画配信サーバの作り方みたいのがあまりないし、セキュアに配信しないといけないし、どうやってやっているのか勉強するために動画配信サーバを作ってみました。まず、iPhoneのコンテンツ配信の仕様のドキュメント、Safari Web...
View Article超軽量動画投稿サービスを作ってみた。
先日、このブログで、動画配信サービスの作り方を書いたのですが、本日はその逆の動画投稿サービスの作り方について。正月にぼーっとしていてふと思ったのです。世の中のスマホのアプリって、基本的に以下の三つのことしかしていないのではないか。(1)サーバにデータを上げる(2)サーバからデータのリストを取得する。(3)サーバからデータをとってくる。だから、この三つのことを簡単にできるようにすればどんなサービスでも...
View Articleビデオカメラの動画をネット配信する
防犯カメラとかUSBカメラの映像をネット配信するサーバをたまに見かけるんですが、どうやって作るのか調べてみました。まず、動画をPCに取り込むキャプチャーデバイスが必要です。高画質なHD画質で取り込みたい場合はAverMediaのAVT-C875などがよく使われてします。SD画質で良い場合は、IO-DataのGV-USB2が値段も安くて手頃です。これらのデバイスはWindowsのDirectShowに...
View Articleテンプレートマッチングをしてみた
サーバ実装のブログはだいぶあきたので、今日からしばらくは画像処理、かっこよくいうとコンピュータビジョン系のことでも書こうと思います。コンピュータが機械学習して、人の顔とか猫とかアニメのキャラクターとかを識別するあれです。いきなり顔認識や機械学習のソースコードをのっけると、話が飛びすぎるので、まず今日は画像処理の基礎から。一番簡単な画像認識であるテンプレートマッチングをやることにします。そもそもテンプ...
View Article顔認識してみた
前回のブログでは一番簡単な画像認識のテンプレートマッチングについて書きました。今回は少し難しくなってOpenCVで定番の顔認識をやってみたいと思います。人間の顔認識、猫の顔認識、アニメのキャラクター認識、企業のロゴ認識なんてことをやるにはOpenCVでカスケード分類器というものを使います。このカスケード分類器に人の顔のデータと人の顔でないデータを何千枚も見せて、機械学習させて、学習結果のデータを作り...
View Article物体認識してみた
前回はHaar-like特徴で顔認識をしました。おじさんのような年齢になると顔認識できてもプログラムのお仕事ってなかなかないんです。若い時にもっとプログラムと英語を勉強しておけばよかったです。そこで今回はいま一番お金になりそうなSIFT、SURFという特徴抽出をつかって物体認識をしたいと思います。物体認識はロボット、自動運転、ジェスチャーゲーム、指紋認証などいろいろな分野で応用を研究されています。こ...
View Article日本が夏の時、オーストラリアは?
うちの会社にはとても面白い若手社員がいまして、「日本が夏の時、オーストラリアは?」と聞くと自信満々に「夏」という社員がいます。理由を聞くと、「日本が8月だとオーストラリアも8月だから」と言われました。おじさん、最近の若者の考え方わからないあるよ。おじさん、最近の若者の考え方本当にわからないあるよ。やっぱりこの問題、難しいからなぁ。なので、このとっても難しい問題をコンピュータで解くことにしました。解く...
View Article僕のコンピュータに猫を認識させてみた
厄年というのはとても恐ろしいです。おじさん、厄年になってまだ一か月たっていないのにおたふく風邪にかかってしまいました。しかも子供のころに予防接種うったのに。年を取ると免疫の学習がダメになってくるようです。顔が腫れて会社にいけないし、部屋からでれないので、今回はディープラーニングについて書きます。何年か前に、Googleがディープラーニングでコンピュータに猫の顔をひたすら見せて認識させていました。ht...
View Article数式を表示できるようにしてみた。
MathJaxというJavaScriptを入れるとブログで数式が表示できるようになるらしいので入れてみました。HTMLのヘッダー部分に以下のHTMLを入れるだけで数式が表示できるらしいです。<script type="text/x-mathjax-config"> MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$'],...
View Articleセキュアでないセキュアプログラミング
お仕事でプログラムをするときは、たとえば長い文字列を渡されてプログラムが攻撃されても大丈夫なようにセキュアプログラミングをしないといけません。言語ごとにセキュアプログラミングのポイントが異なるのですが、とくにC言語はセキュアにプログラムをするのが本当に難しいです。例えばアップルとかは以下のガイドラインを出してます。セキュアコーディングガイド - Apple...
View ArticleMySQLを動的にリンクする
久しぶりにデータベースの勉強をしようと思い僕のWindowsマシンにMySQLを入れてみました。ところがMySQLをC言語から使おうとするとVisualStudio2013までしかサポートしていません。せっかく最新のVisualStudio2015をいれたのに。これでは最新の開発でMySQL使えないじゃん。このようなVisualStudioやGCCのバージョン依存問題って本当によく起こるのでこれらを...
View ArticleMySQLとSQLiteを切り替える
今週はデータベースの勉強期間なのでデータベースネタをもう一つ。たぶんこれでデータベース系は最後です。僕、SQLiteって軽くて高速なので、大好きでよく使います。だけれど、スマートフォンなどのクライアント側はSQLiteが主に使われているのに、サーバ側はMySQLがメインで、使用するデータベースが違っていてサーバとクライアントで共通化できなくて困ります。SQLiteでさくっとプロトタイプを作って、あと...
View ArticleC++の共有ライブラリをdlsymで呼び出す
C++で共有ライブラリを作って、dlsym()でクラスメソッドを動的に呼び出す場合、どうすればよいのか調べてみました。ネットでよく出回っている方法は、MicrosoftがComponentObjectModelで昔よく使っていたクラスメソッドにすべてvirtualをつけて宣言し、クラスを作ったり破棄したりするC言語形式のファクトリー関数を用意する方法です。----------------------...
View Articleシングルトンを作る
おじさん、シングルトンについて勉強しました。プログラムでインタフェースの勉強をすると一番最初に出てくるあれです。C/C++でシングルトンを作るのって本当に難しいです。これでもかというほど難しいのです。おじさん、40歳を過ぎても、いまだにシングルトンを正しくかけず。そこで本日はC++で何パターンかシングルトンを自分で作ってみました。パターン3は遅いからよくないのはわかるんですが、じゃあどう書けばよいの...
View ArticleIoT用の最軽量httpdを作ってみた。
以前のブログで、軽量httpdのことを書いたのですが、Mongooseのライブラリは軽量といってもソースコードが300キロバイトくらいあります。簡単に改良できて、貧弱なIoTデバイスとかにも乗せられるように、もっともっと軽量化できないかなと思い、自分でスクラッチで最軽量のhttpdを書いてみました。丸一日かけて書いたソースコードがこれです。シングルスレッドでIPV4とIPV6両対応でHTTPの規格で...
View Article自動微分をする
よく、コンピュータの理論を勉強する前に基礎である線形代数を勉強してほうが良いといわれています。この線形代数なのですが、おじさんの時代は主にベクトルとか逆行列とかをやっていました。まぁゲームとかを作る際に座標の計算とかをしないといけないからなのですが。しかしこの線形代数、時代とともに旬な領域が変化していまして、最近は二重数とか自動微分とかをイギリスの大学で勉強するようです。おじさんの時代は二乗すると-...
View Article最小二乗法をやってみた
たまには数値計算でもしてみようかなぁと思い、最近はやりの最小二乗法を作ってみました。グラフツールとかインストールしていないので、コンソールにグラフを書く簡単なライブラリも作ってみました。おーなんかあってるっぽいね。-----------------------------------------------#include <stdio.h>#include...
View Article勾配降下法をやってみた。
最小二乗法が簡単だったので調子に乗って勾配降下法をC言語で実装してみました。関数の最小値を求めるもっとも簡単なやつです。これも実装だけならば簡単。いろいろ実験して遊ぶのには最適です。関数の傾きを求めてちょっとづつ移動していくやつです。遊んでわかったことは初期値が平らなところから始まるとこれでもかと思うくらいなかなか値が収束しません。ダメじゃん。傾きを計算するのに導関数もいるしね。ということでいつか非...
View ArticleC言語でレーベンバーグ・マーカート法(Levenberg-Marquardt)をやってみた
最小二乗法を実験するブログ、最終回の本日は、レーベンバーグ・マーカート法です。最小二乗法は線形関数を推定する場合は簡単なのですが、非線形の場合とっても難しくなるようです。ソースコードでいうと、線形の場合、C言語のファイルが一つなのですが、非線形の場合、ファイルが2000個近くになります。ビッグマックセットに例えると、普通のビッグマックセット650円なのにグランドビックマックセット130万円って感じで...
View Article