LoginSignup
2
3

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-24

動画から画像を収集するプログラムを実行していましたが
動画が長いと多量の画像が生成されてしまうため
動画編集にオープンソースの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を選んで起動してもよし。
avidemux.png

機械学習用に訓練用データを収集したい時など
動画編集出来ると便利です。
積極的に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参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3