読者です 読者をやめる 読者になる 読者になる

APIとは?

APIってよく聞きますが、きちんと理解している人は意外と少ないのではないかと思います。

今日はAPIについて簡単にでも分かるように書きたいと思います。

APIとは
wikipediaの説明では
アプリケーションプログラミングインターフェース(API, Application Programming Interface)とは、ソフトウェアコンポーネントが互いにやり取りするのに使用するインターフェースの使用である。

ん??どういう意味や。簡単に言うと「アプリケーションをプログラミングするためのインターフェース」という意味になります。
このインターフェースを共有することでもあります。

APIとはソフトウェアの機能を共有すること
APIは自分のソフトウェアを一部公開して、他のソフトウェアと機能を共有できるようにしたものです。

ソフトウェアの一部をweb上に公開することによって、だれでも  外部から利用することができるようになります。

それによって、自分のソフトウェアに他のソフトウェアの機能を埋め込むことができるようになるので、アプリケーション同士で連携することが可能になる。

API」=「機能+仕様書」
ただ、外部からソフトウェアの機能を利用するといっても、内部のコードまでは公開していません。

ですので、外部からは機能の使い方や仕様がわからないため、「こうすると機能を利用できます」「この機能はこのように使ってください」のような使い方を説明する必要があります。

またセキュリティの観点から、「このような使い方はできません」「このような使い方はしてはいけません」などのルールも定められています。

API」は、このような仕様やルールと一緒にまとめてweb上に公開しているものが一般的です。

よって、APIとは「機能+仕様書」と言い換えることができます。

インターフェースとは?
IT用語としてのインターフェースは、人間とコンピュータが接する部分のことを指します。

人間とコンピュータの境界にたって、情報をやり取りしてくれる役割をするものです。

具体的には、パソコンのキーボードやマウス、テレビのリモコンや駅の券売機などがインターフェースに当たります。

同じように、APIも「プログラマー」の代わりに「アプリケーションに情報や指示を出してプログラミングしてくれる」役割をしているため、「アプリケーションプログラミングインターフェース」と呼ばれている。

libとdllの違い

libファイルとは?
lib = Static Link Library
libは静的リンク。これは、簡単にいうとライブラリをプログラムに組み込み、実行ファイル(exe)に埋め込まれたもの。

dllファイルとは?
dll = Dynamic Link Library
dllは動的リンク。これは、簡単にいうとライブラリをexeファイルとは別に作成し、実行時に必要なものを外部から動的に呼び出すもの。

libファイル dllファイル
利点 exe単体で動作可能 メモリ使用量が小さい
ディスク容量が小さい
バージョンアップが容易
欠点 メモリ使用量が大きい
ディスク容量が大きい
バージョンアップが面倒
exe単体で動作不可能

LaTeXの痒い所に手が届く

caption内で改行する方法
文章中では改行は基本的に「\\」を使いますが、図や表のキャプション中では使えません。そこで、

\newline

を使えば大丈夫です。
※ただし、\newlineの後に半角スペースを入れることを忘れずに。

複数行まとめてコメントアウト
コメントアウトとして基本的には「%」を使いますが、複数行コメントアウトしたいときは次のように書きます。

\usepackage{comment}

\begin{comment}
コメントアウトしたいところ
コメントアウトしたいところ
コメントアウトしたいところ
\end{comment}

図を並べる
例:二枚の画像を横に並べる

\begin{figure}[H]
  \begin{tabular}{cc} %中心揃え
  % 最初の図---------------------------
  \begin{minipage}[t]{0.45\hsize}
    \centering
    \includegraphics[位置指定]{ファイル1}
    \caption{キャプション1}
    \label{ラベル1}
  \end{minipage} & 
  % 2番目の図--------------------------
  \begin{minipage}[t]{0.45\hsize}
    \centering
    \includegraphics[位置指定]{ファイル2}
    \caption{キャプション2}
    \label{ラベル2}
  \end{minipage}
  \end{tabular}
\end{figure}

関連のある複数の図を挿入
subcaptionのパッケージは並べた一つ一つの図に(a), (b), ...といったキャプションを付けることができます。

\usepackage[subrefformat=parens]{subcaption}

\begin{figure}[H]
  % 最初の図---------------------------
  \begin{minipage}[b]{0.45\hsize}
    \centering
    \includegraphics[位置指定]{ファイル1}
    \subcaption{キャプション1}
    \label{ラベル1}
  \end{minipage} & 
  % 2番目の図--------------------------
  \begin{minipage}[b]{0.45\hsize}
    \centering
    \includegraphics[位置指定]{ファイル2}
    \subcaption{キャプション2}
    \label{ラベル2}
  \end{minipage}
  \caption{キャプション}\label{ラベル}
\end{figure}

章番号を消したい

\part*{part1}
\section*{section1}
\subsection*{subsection1}

章番号あり
f:id:takahiro-itazuri:20170328131713p:plain

章番号なし
f:id:takahiro-itazuri:20170328131804p:plain

行間を詰める

\renewcommand{\baselinestretch}{0.9} %0.0~1.0の値を入れる

表の特定のセルのみ位置指定を変更したい

\multicolumn{1}{位置指定}{文章}

を使う
例)2×2の表の(1, 2)の部分のみをセンターにする

%\multicolは複数の列を統合するもの
\usepackage{multicol}

\begin{document}

\begin{table}[t]
\caption{caption}
\label{label}
\centering
\begin{tabular}{|l|c|r|}
\hline
upper left & upper center & upper right \\ \hline
\multicolumn{1}{|l|}{left} & \multicolumn{1}{|c|}{center} & \multicolumn{1}{|r|}{right} \\ \hline
lower left & lower center & lower right \\ \hline
\hline
\end{tabular}
\end{table}
\end{document}

f:id:takahiro-itazuri:20170328021227p:plain

ページ番号を編集する

\documentstyle[]{}
\pagestyle{empty} %ページ数を消す

csvファイルの読み込み

読み込み(入力)

  • csvモジュール
import csv

f = open('data.csv', 'rb')

dataReader = csv.reader(f)

for row in dataReader:
    print(row)
  • pandasモジュール
import pandas as pd

data = pd.read_csv('data.csv')

書き出し(出力)

import csv
 f = open('output.csv', 'w')
writer = csv.writer(f, lineterminator='\n')

csvlist = []
csvlist.append("data1")
csvlist.append("data2")

writer.writerow(csvlist)

f.close()

自己組織化マップ(SOM: Self-organization maps)

自己組織かマップは、多次元データの順序付けられた代表(=秩序だった表現)を作成するもので、複雑さを単純化し、有意義な関係性を明らかにするために使用されている。
教師なし学習を行うニューラルネットの一種である。
SOMはn次元ベクトルを平面に写像する方法。

MPEG-7

そもそもMPEGって何?
MPEGとはISO(国際標準化機構)の「Moving Picture Expert Group(動画の専門団体)」による規格のこと。

MPEG-7はMPEG-1,2,3などとは異なり、動画データのエンコードが目的ではなく、XMLをベースとしたメタデータ記述によるマルチメディアデータの高速な内容検索を目的としている。 MPEG-7は、IOSで策定された、マルチメディアコンテンツを有効に検索するための記述方法に関する国際標準規格である。

ちなみに正式名は「multimedia content description interface」とのこと。

MPEG-7のアプローチ
MPEG-7は大きく二つの方法からアプローチしている。

一つは、コンピュータで処理が可能な信号レベルの特徴を記述しておき、自動的に抽出した特徴と照合する方法である(記述子)。
ex) 色ヒストグラム、輪郭線分布、色分布、オブジェクト形状など

もう一つは、人間が判断した特徴をメタデータとして映像に埋め込んでおくといった方法である(記述スキーマ)。
ex)野球の映像でそれぞれのシーンごとに、試合日、イニング、球場名、球種、バッティング結果など

OpenCVの動画のプロパティを取得する

// 動画読み込み
cv::VideoCapture video("filename");
// 画像の幅
int width = video.get(CV_CAP_PROP_FRAME_WIDTH);
// 画像の高さ
int height = video.get(CV_CAP_PROP_FRAME_HEIGHT);
// 総フレーム数
int count = video.get(CV_CAP_PROP_FRAME_COUNT);
// fps(frame per sec)
double fps = video.get(CV_CAP_PROP_FPS);