2024年2月3日土曜日
2015年12月25日金曜日
【全自動】水玉コラ生成マシーン
【全自動】水玉コラ生成マシーン
聖夜なので表題のものを作った。
processing で書いたアプリだけど、この記事の内容はほぼ OpenCV の話です。
仕組み
- 水着を自動認識して「隠す」とマーク
- 顔を自動認識して「見せる」とマーク
- マークに沿って円充填
水着領域の自動認識
最初のアプローチ
- OpenCV を使って肌色認識
- 選択領域を膨張 -> 収縮させる
- 肌色との差分を取れば水着領域が完成
肌色認識
先人が大量に居た。RGB 色空間ではなく HSV 色空間を使うというのがコツなようだ。
HSV 色空間なら影になっている部分も抽出できる。
今回は Hue: 7..15 を肌色として定義した。
PImage detectHada() {
// 作業用に hue で grayscale にする
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getH().clone());
// 肌色は 7..15 と定義。inRange で取り出す
opencv.inRange(7, 15);
// ノイズ除去 MORPH_OPEN
opencv.erode();
opencv.dilate();
return opencv.getSnapshot();
}
PImage detectHada() {
// 作業用に hue で grayscale にする
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getH().clone());
// 肌色は 7..15 と定義。inRange で取り出す
opencv.inRange(7, 15);
// ノイズ除去 MORPH_OPEN
opencv.erode();
opencv.dilate();
return opencv.getSnapshot();
}
膨張・収縮
欲しいのは肌色領域ではなく水着領域なので、肌と肌の間の空間を選択する必要がある。
膨張 -> 収縮し、最初との差分を取ることで取得できるのではないかと考えた。
// 輪郭を広げて戻す
for (int i = 0; i < 10; i++) { opencv.dilate(); }
for (int i = 0; i < 10; i++) { opencv.erode(); }
が、膨張する際に水着領域を上手に隠せないパターンが多い。
問題はループで 10 回回しているところにあり、本来は膨張・収縮時にパラメータを渡して解決すべきである。 デフォルトのパラメータのまま無理やりループで代替したところ、望むような膨張効果が得られていない。
opencv-processing でパラメータを渡す方法を調べるのに時間がかかりそうだったので次善の策に頼ることにした。
// 輪郭を広げて戻す
for (int i = 0; i < 10; i++) { opencv.dilate(); }
for (int i = 0; i < 10; i++) { opencv.erode(); }
彩度の高いもの=水着と仮定する
グラビアの水着はなぜか彩度の高いものが採用されていることが多いので「彩度の高いもの」という条件で水着が抽出できる。
いくつかパラメータを変えつつ試したが、
- Saturation: 180..255 (彩度の高いものを水着と仮定する)
- Brightness: 8..247 (あまりに暗いもの、明るすぎるものを除外する)
という絞り込みで、一定の条件の水着に対しては判定が効くようになった。
void detectMizugi() {
// 水着を彩度 180..255, 明度 8..247 と定義。inRange で取り出す
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getS().clone());
opencv.inRange(180, 255);
PImage s = opencv.getSnapshot();
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getB().clone());
opencv.inRange(8, 247);
PImage b = opencv.getSnapshot();
// TODO: 無駄に PImage に一度変換して blend しているが
// おそらく OpenCV のみで可能
s.blend(b, 0, 0, width, height, 0, 0, width, height, MULTIPLY);
opencv.loadImage(s);
opencv.erode();
opencv.dilate();
ArrayList<Contour> contours = opencv.findContours();
for (Contour contour : contours) {
// 面積が小さすぎるものはノイズと判断して弾く
if (contour.area() > 25) {
mizugiAreaList.add(contour);
}
}
}
void detectMizugi() {
// 水着を彩度 180..255, 明度 8..247 と定義。inRange で取り出す
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getS().clone());
opencv.inRange(180, 255);
PImage s = opencv.getSnapshot();
opencv.loadImage(img);
opencv.useColor(HSB);
opencv.setGray(opencv.getB().clone());
opencv.inRange(8, 247);
PImage b = opencv.getSnapshot();
// TODO: 無駄に PImage に一度変換して blend しているが
// おそらく OpenCV のみで可能
s.blend(b, 0, 0, width, height, 0, 0, width, height, MULTIPLY);
opencv.loadImage(s);
opencv.erode();
opencv.dilate();
ArrayList<Contour> contours = opencv.findContours();
for (Contour contour : contours) {
// 面積が小さすぎるものはノイズと判断して弾く
if (contour.area() > 25) {
mizugiAreaList.add(contour);
}
}
}
顔領域の自動認識
OpenCV に任せて 2 行で解決した。
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
Rectangle[] faces = opencv.detect();
デフォルトだと誤認識率が 30% ぐらいあるが、OpenCV に同梱されている分類器を複数重ね合わせて使う のように、認識率を上げる手段がまだあるようだ。
opencv.loadCascade(OpenCV.CASCADE_FRONTALFACE);
Rectangle[] faces = opencv.detect();
円充填
ここまでで「隠す領域」と「隠してはいけない領域」が抽出できたので、 いい感じに円で埋めていく作業をする。
等で勉強したのだが、美しい水玉コラを作るには
- 水着を全て隠す
- 顔は必ず見せる
- 水玉は重ねない
- 水玉の数は多くても 15 個まで。少なければ少ないほど良い
といった標準的なルールの他に
- 穴が直線上に並ばないようにする
- 隠された領域が水着っぽく見えてしまい、「らしさ」が薄れる
- 肩、くびれを見せる
- ボディラインを強調することができ、より完成度が高く見える
- 谷間・アゴを見せる
- 「らしさ」が一層高まる
といったテクニックがあるようだ。
とはいえ「くびれを学習させた教師データ」なるものは存在しないので、右上、左上から先に開けることでなるべく肩が含まれることを期待するにとどめた。
ここでゲームで培った当たり判定の技術 (OBB と点の当たり判定、凸包と点の当たり判定等) が生きたんだが、 処理を簡便化するために水着領域を凸包にしたことで谷間を見せることができなくなってしまった。
(黄色の部分が当たり判定になるので谷間は必ず隠れてしまう)
ここは今後改善したい。
- 隠された領域が水着っぽく見えてしまい、「らしさ」が薄れる
- ボディラインを強調することができ、より完成度が高く見える
- 「らしさ」が一層高まる
おまけ (曇りガラス効果)
OpenCV には inpaint という演算があり、これを用いると「選択領域を取り除き、付近のピクセルを利用していい感じに埋める」ということができる。
と、いうことは「水着を取り除き」「ガウスボカし」で曇りガラス表現ができるのでは……!
まとめ
OpenCV 超便利。
全自動で水玉を適用できるようになったので「動画に適用できるのでは?」とか「Chrome 拡張等で全 web ページに適用できる?」とか夢が広がっている。
また、人間が頭で考えている手順はだいたい自動化できるというのも再認識した。
偉大なる先人たち
- 顔認識と肌色抽出及び効率的円配置による水玉コラの自動生成に関する研究
- Python/OpenCVで顔検出を利用した肌色検出 - ぱろすけ's website (現在リンク切れ)
- 水玉コラを動画でやってみたら予想以上に真っ裸になった. - ニコニコ動画:GINZA
- python + opencv で肌色を検出して褐色にするだけ - きよぽん=サンのブログ
- 裸に見える水玉コラ作成アプリ「Strip-Her」
http://blog.onk.ninja/2015/12/24/auto_circle_collage
2015年12月7日月曜日
マイナンバー 副業 バレる
「マイナンバーで副業が会社にバレる」は本当か?
マイナンバー導入で副業が会社にバレる?
少し前に某ビジネス雑誌系のサイトで、「マイナンバーが導入されるとサラリーマンの副業が会社にバレるようになる。夜に副業でキャバクラなどで水商売しているOLが副業をやめ、キャバ嬢が激減することで繁華街がゴーストタウン化するかもしれない」などという記事が掲載され、話題になりました。この話に関心がある人は本当に多いようで、現在もインターネットのQ&Aサイトやアフィリサイトのようなページで、マイナンバーと副業の会社バレの関係が数多く語られています。
国が収集した個人情報を民間企業に教えるようなことが本当にあるのか? そうだとすると、とんでもないことなので、そういう視点でマイナンバー制度について調べてみました。(うちの編集長も別の視点で気になっているはず)
まずは、記事の主張ですが
マイナンバーが導入されると
1)勤務先(副業含め)にマイナンバーを提出しなければならない
2)副業でアルバイトをしていると確定申告が必要
3)確定申告をすると、副収入分を含めた住民税額が会社に通知されるのでバレる
1)勤務先(副業含め)にマイナンバーを提出しなければならない
2)副業でアルバイトをしていると確定申告が必要
3)確定申告をすると、副収入分を含めた住民税額が会社に通知されるのでバレる
このことについて話す前に、まずはマイナンバー制度について、ここで簡単に説明しておきます。
マイナンバー制度の概要
マイナンバーとは、社会保障・税番号制度のことです。国民一人一人に12桁の固有の番号が割り当てられます。この番号を元に国民全員の収入を正しく把握して公平に税金を徴収したり、社会保険の加入手続きや保険料の徴収、給付手続きなどを行ったりします。また行政手続きの効率化を図ったり、福祉分野の給付を正しく行う(例えば生活保護の不正受給などを防止する)ためにも利用されるようです。上記のことを実現するために、全国民の収入や社会保険の加入情報等を行政が把握する必要があるので、サラリーマンであれば会社に自分のマイナンバーを提出し、会社は源泉徴収や社会保険の手続きにおいて各社員のマインナンバーと会社に割り当てられた法人のマインナンバーを記載することになります。扶養家族がいる場合は、家族のマイナンバーも会社に提出します。
さらに、もし副業などをしている場合はバイト先の会社にもマイナンバーを知らせなければなりません。
つまり、誰がどこからどれだけ収入を得たかということを国が把握することができる制度です。
(マイナンバー制度について詳しくは、「マイナンバー 知ってる?」を参照ください)
すべてが監視されているみたいで、やましいことがなくても気持ち的にはちょっと嫌な感じがしますよね。さらに今年あった年金情報の流出みたいに、マイナンバーやそれにひもづけられた情報がもし流出してしまったとしたら、重大な問題となります。各省庁や自治体、年金機構等の行政関連機関もそうですが社員のマイナンバーを保持する民間企業においても情報のセキュリティはやりすぎなくらいに強化してもらいたいところです。
マイナンバーは会社に副業を知らせる制度なのか?
それでは、マイナンバー制度により副業が会社にバレるということに関して考えてみましょう。まず、政府広報サイトによると「マイナンバーは社会保障・税・災害対策分野の中でも、法律や地方公共団体の条例で定められた行政手続きにしか使えません」とあります。
将来は、銀行や証券、病院や処方箋などの医療分野、公共料金の支払等マイナンバーの民間への利用拡大も視野に入っているようですが、その場合でも当然、利用制限などはされるでしょう。
ということで、マイナンバーは、当初は行政手続きにしか使う予定はありません。マイナンバー制度により、行政機関等が個人の副業情報などを働いている会社に伝えるということは基本的にはないでしょう。
ただし、マイナンバー制度自体によって副業がバレることがなかったとしても、マイナンバーが導入されたことがきっかけで、結果的にバレてしまうというケースはあるでしょう。
冒頭のビジネス雑誌系サイトの記事もそのことについて触れていると思われます。
では、いよいよ上記1)~4)について考えてみたいと思います。
前半のおさらい
最近ネットを騒がせている「マイナンバーが導入されると、会社に副業がバレる」という噂をきっかけに、マイナンバー制度について調べてみました。マイナンバー自体は、行政サービスや社会保障、納税等の手続きの効率化、負担の公平化を図ることが目的で、直接的に副業を会社に知らせるような仕組みではなさそうということがわかりました。では今回は、某ビジネス雑誌系サイトにあった記事の内容
マイナンバーが導入されると
1)勤務先(副業含め)にマイナンバーを提出しなければならない
2)副業でアルバイトをしていると確定申告が必要
3)確定申告をすると、副収入分を含めた住民税額が会社に通知されのでバレる
について、考えてみたいと思います。1)勤務先(副業含め)にマイナンバーを提出しなければならない
2)副業でアルバイトをしていると確定申告が必要
3)確定申告をすると、副収入分を含めた住民税額が会社に通知されのでバレる
マイナンバーで副業がバレるという記事についての考察
1)勤務先(副業含め)にマイナンバーを提出しなければならない
マイナンバーが導入されると、社員は勤務先等にマイナンバーを提出することになります。また法人も法人用のマイナンバーが割り振られます。したがって、誰がどこからいくらの収入を得たかがすべて税務署に把握されることになりそうです。
2)副業でアルバイトをしていると確定申告が必要
副業等の収入が20万円を超えると、会社員でも確定申告が必要です。これはマイナンバーの導入とは関係なく、今でもそうです。さらにいうと収入が20万以下の場合、税務署への確定申告は不要でも住民税の申告は必要な場合があります。
3)確定申告をすると、副収入分を含めた住民税額が会社に通知されのでバレる
例えば、副業をしている会社員が確定申告をしたとします。その場合、副業収入を含めた住民税が会社に通知されるかどうかについては、副業収入の種類や申告の仕方によります。
住民税には普通徴収(自分で納める)と特別徴収(会社員等で給料から天引きになる)の2種類の納め方があります。そして確定申告では、給与所得以外の収入はどちらの納め方にするか自分で選択できるようになっています。(参考:国税庁サイト)
したがって、副業収入が給与所得でない場合は、その分を普通徴収にすれば副業分の住民税は会社には通知されません。ただし、副業がアルバイトなどで給与所得になる場合は、原則、本業の住民税とあわせて特別徴収となりますので、会社に副業分も含めた住民税の額が報告されます。つまり、それをきっかけに副業がバレる可能性があります。
ということで、長々と説明してきましたが、マイナンバー導入がきっかけで副業がバレることもあれば、バレないこともあるというのが実情です。したがって、副業収入が給与所得でない場合は、その分を普通徴収にすれば副業分の住民税は会社には通知されません。ただし、副業がアルバイトなどで給与所得になる場合は、原則、本業の住民税とあわせて特別徴収となりますので、会社に副業分も含めた住民税の額が報告されます。つまり、それをきっかけに副業がバレる可能性があります。
マイナンバー自体は直接的に副業をばらすような制度ではないですが、これまで確定申告しなければいけないのにしていなかった人が確定申告せざるをえないようになり、副業分の住民税の徴収方法がどうなるかによってはバレるケースがあるということです。
ちなみに、いま副業をしていて確定申告が必要なのにしていない人がいるとします。その人たちは副業がバレないのかといえば、そうでもありません。副業している会社がその人への報酬についての支払調書をその人が住んでいる自治体に提出していれば、確定申告をしていなくても副業分の住民税が加算されて会社に報告されることになるからです。
また、くだんの記事にある「副業で夜にキャバクラなどで水商売しているOLが確定申告をすると会社にバレる」とありますが、キャバクラ収入が給与所得にあたる場合はその可能性は高そうですが、それ以外の所得にあたる場合は、確定申告で普通徴収にすれば会社バレの可能性は少ないと思われます。
つまり勤務先のキャバクラがどのような形式で報酬を支払っているかによってきます。
私はキャバクラで働いたことがないのでわかりませんが、ちまたの噂では後者の方が多そうな感じです。だとすると、そのようなOLキャバクラ嬢の皆さんが面倒がらずに確定申告してくれれば、同記事にあるように繁華街がゴーストタウンになるほどキャバクラ嬢が激減するということはないような気がします。
※住民税の徴収については各地方自治体により取り扱いが違う場合もあるようです。上記説明はあくまでも原則の話となります。
最後に・・・
就業規則で禁止されている副業をしているという方は、マイナンバーが導入されるかされないかとは関係なくバレるときはバレます。また、もし確定申告が必要なのにしていないのであればきちんとするべきです。その結果、バレるかどうかについては、税理士や役所に確認することをおすすめします。そして、副業を続けるかどうかはご自身でよく考えてご判断ください。今回いろいろ調べましたが、マイナンバーが具体的にどうなるかという情報は圧倒的に少なく、正直どうなるのか詳細はまだ不明な部分が多いです。また税金に関することは非常にしくみが複雑ですので、はっきりしたことはわからないというのが実情です。
ネットで検索してみても、素人が聞きかじりの知識でアレコレいっているサイト多かったです。マイナンバーや税金については、実務に詳しい税理士や会計士の意見を聞くべきで、それ以外の人が言っているあやふやな情報を信じると失敗してしまうかもしれません。
そういう意味では、私もただのファイナンシャルプランナーであり税金の専門家ではありません。今回の記事も行政機関の発表内容や税理士の方の解説を参考にして、そこでわかったことについて書いてはいますが、それでも誤解や間違いがあるかもしれません。また、今後細かい制度変更などもあるかもしれません。十分にご注意ください。
繰り返しになりますが、税金について何かあれば、必ず税理士や税務署、住民税であればお住まいのエリアの役所に相談してくださいね。
おまけ
今回は、住民税の面から副業バレについてスポットを当てていますが、副業で2か所から給与をもらっている場合は、就業形態によっては、もしかしたらマイナンバー導入により、健康保険や年金などの社会保険の部分からバレる可能性もあるのでは?と思いました。これについては、調べてないのでよくわかりませんが、何かわかれば追加レポートをするかもしれません。また、副業バレではありませんが、年末調整で本当は奥さんに収入があるのに、ないことにして配偶者控除の申請をするなどの不正をした場合、マイナンバーの導入で簡単にバレることになりそうです。そもそもそんな不正をしてはいけませんし、マイナンバーでなくてもバレる可能性はあります。十分気をつけなければなりません。いや、気をつけるというか、そんな虚偽申請はやめてくださいね。
※本記事は、就業規則で禁止された副業を推奨したり、会社にバレない方法を指南するものではありません。
Sports Graphic Number (スポーツ・グラフィック ナンバー) 2013年 2/21号 [雑誌] |
Sports Graphic Number (スポーツ・グラフィック ナンバー) 2008年 3/20号 [雑誌] |
Sports Graphic Number (スポーツ・グラフィック ナンバー) 2011年 8/4号 [雑誌] |
登録:
投稿
(
Atom
)









