2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

オセロの盤面を認識し、可能な手を現実に投影してみた

Last updated at Posted at 2025-01-05

はじめに

12月に、私の所属する団体で、ピクシブさん協賛の部内ハッカソンが開催されました。
そこで私たちの作った"ボドゲアシスト"が、学生メンター最優秀賞、会場の全員が投票できるアイデア賞をいただきました。
この記事では、作成したモノの概要や使用技術について簡単に紹介をします。

動機

2024年10月、ニンテンドーミュージアムがオープンしました。
そこには、花札で遊べるこのような施設があります。
nintendo_hanafuda.PNG

私はこれを見て、アナログゲームをアナログのまま遊びやすくする良い方法だと感じ、花札以外でもやりたいと思い、作ってみることにしました。
最初は認識もルールもシンプルなオセロでやってみることにしました。

概要

実際に遊んでいる動画です。

やっていることは、

  1. カメラで盤面を撮影
  2. OpenCVで盤面を認識
  3. アシスト(次の手,裏返す石)の位置を計算
  4. プロジェクターで投影

と、シンプルです。

ソースコードはこちら。

盤面認識

自分で方法を考えながら、こちらの記事を参考にしつつ、盤面を認識する方法を実装しました。

色々模索するも、ほとんどこの記事と同じ方法でやったので、大きな違いのみを簡潔に述べます。

石の位置の特定

上記記事では、切り取った正方形のうち、緑色以外の場所を石とみなしていました。
その方法だと白と黒で認識精度に差が生まれてしまったので、私は白と黒を分けて処理して石の位置を特定しました。
ソースコードの97-114行あたり。

石の色の特定

上記記事では、中心の周囲が狭い,広い場合でチェックしていました。
私は反射をある程度無視できる良い環境でやることを前提に、固定の四角形内の明るさのみで判断をしました。
(今考えると、これも白黒を分けた状態で処理してもよかった気もする。)

オセロの処理

認識した盤面でオセロをするだけの簡単な処理、では不十分なんです。
画像認識が常に正しくできるとは限らない、手などのノイズも入るのでできない前提で、遷移可能な盤面にしか進めないようにしています。
これもあり画像認識を少し簡易的に行っています。

具体的には、理想盤面を常に持っており、以下のような流れで処理をしています。

  1. 最初の盤面を取得
  2. 可能な手を表示
  3. 置ける位置に石が置かれた時、その場合の理想盤面に更新
  4. 現在盤面と理想盤面のと差分を表示
  5. 理想盤面になったら、2に戻る

上記動画では分からないが、

  • 置けない場合は自動でパス
  • 両者置けない場合はゲーム終了

の処理も実装してあります。

課題

  • 手やその影などがノイズとなって認識が難しい時がある
    • 上記の通り正しいオセロ以外は認めていないが、それでも誤認識してしまう時があるので石以外を弾きたい
    • (箸等でプレイすれば、最低限のノイズを実現できた)
  • 同じ色の石が1つも無いと正しく認識できない
    • 相対的な面積で石を認識しているので、絶対的な面積で判断したい
    • 円の検出で石を認識できなかったので、円でも上手くやりたい

おわりに

アナログとデジタルを融合させた、実際に触って楽しい作品を作ることができ、その上賞もいただいたので、たいへん充実したハッカソンとなりました。
ですが、今回OpenCVを初めて使用したのもあって、全体的な流れの計画や仕事の割り振りを上手くできず、すごく悔しく思っています。
今後このような機会があれば、そこで生かせるよう精進して参ります。

最後までお読みいただきありがとうございました。

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?