avidemuxをUbuntu14.04にインストールして動画編集


動画から画像を収集するプログラムを実行していましたが
動画が長いと多量の画像が生成されてしまうため
動画編集にオープンソースのavidemuxを使ってみました

環境はubuntu14.04

インストール手順

レポジトリの登録
sudo add-apt-repository ppa:rebuntu16/avidemux+unofficial

パッケージアップデート
sudo apt-get update

インストール
sudo apt-get install avidemux2.6-gtk avidemux2.6-qt4

Ubuntuのアプリケーションメニューで起動できます。
動画ファイルを指定して右クリックから
一度avidemuxを選んで起動してもよし。

機械学習用に訓練用データを収集したい時など
動画編集出来ると便利です。
積極的にOSSツールを活用したい所ですね。
OpenCVから提供されている顔分類器は下記の通り。
顔切り出しコードのカスケード分類器xmlファイルの部分を書き換える事で認識したい対象を変更できます。

顔検出用 カスケード分類器

haarcascade_frontalface_default.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_profileface.xml

アニメ顔検出の場合

天才により作成されたアニメ顔検出用の分類器です。

//名前 lbpcascade_animeface.xml 
//使い方:
 face_cascade.load("lbpcascade_animeface.xml");

顔切り出しコード

*切り出しコードやコンパイル方法等詳細は闇に舞い降りた天才、kivantiumさんのページを参照してください。

#include <opencv2/opencv.hpp>
#include <string>
#include <sstream>
#include <iomanip>

using namespace std;
using namespace cv;

void detectAndDisplay(Mat image);

CascadeClassifier face_cascade;

int imagenum = 0;

int main(int argc, char* argv[]){
   int framenum = 0;

   //カスケードのロード
   >face_cascade.load("lbpcascade_animeface.xml");

   //動画の読み込み
   Mat frame;
   VideoCapture video("video");
   if(!video.isOpened()){
       cout << "Video not found!" << endl;
       return -1;
   }

   for(;;){
       framenum++;
       video >> frame;
       if (frame.empty()) {
           cout << "End of video" << endl;
           break;
       };
       //全フレーム切りだすと画像数が増え過ぎるの>で10フレームごとに検出
       if(framenum%10==0) >detectAndDisplay(frame);
   }
   return 0;
}

//認識と表示を行う関数
void detectAndDisplay(Mat image)
{
   vector<Rect> faces;
   Mat frame_gray;
   stringstream name;

   //画像のグレースケール化
   cvtColor(image, frame_gray, >COLOR_BGR2GRAY );
   //ヒストグラムの平坦化
   equalizeHist(frame_gray, frame_gray);
   //顔の認識 小さい顔は除外
   face_cascade.detectMultiScale(frame_gray, >faces, 1.1, 3, 0, Size(80,80));
   for(int i = 0; i<faces.size(); i++){
       //顔部分に注目したMatをROIで作る
       Mat Face = image(Rect(faces[i].x, >faces[i].y,faces[i].width, faces[i].height));
       //連番のファイル名を作る。参考:http://www.geocities.jp/eneces_jupiter_jp/cpp1/013-001.html
       name.str("");
       name << "image" << setw(3) << >setfill('0') << imagenum << ".png";
       imwrite(name.str(), Face);
       imagenum++;
   }
}

ちなみに開発で使用する動画の著作権については
情報解析の為であれば著作権法第47条の7に該当し自由に使える範疇になります。
OpenCVを用いた画像認識手法の開発は
情報解析に該当する筈ですから
皆さん、法律を守って面白いものをガンガン開発しましょう。

情報解析のための複製(著作権法第47条の7)
コンピュータを使った情報解析のために、必要と認めら
れる限度において、著作物を複製することができる。

*しかしながらその後ogv形式のファイルが開けなかったりしたので
 openshotという動画編集ソフトを入れてみました。
 ogvは問題なく開けたのでしばらく使ってみます。

sudo add-apt-repository ppa:openshot.developers/ppa
sudo apt-get update
sudo apt-get install openshot

参考ページ:
kivantiumさんのページ
アニメ顔カスケード分類器を作成された方
OpenCVの分類器についてはこちら
著作権情報センター
avidemux参考