バーコード認識とか,OpenCVとか,OpenGLとか合わせてみる.
書籍のISBNを使った拡張現実なんぞをやろうかと思い付き,試してみるテスト.
OpenGLとOpenCVを組み合わせる件については以下を参考に.
そして,バーコードを認識する件については,ZBar bar code readerなるライブラリを使ってみる.
ただ,OpenCVのキャプチャデータIplImageから,ImageMagickを使うべきライブラリに持ってこないといけないので,ちょっと弄っておく.
バーコードを見つけて,ISBNコードを返すコードを以下.
bool findBarcode(IplImage *src, char *code) { cvCvtColor(src, grayImage, CV_BGR2GRAY); ImageScanner scanner; scanner.set_config(ZBAR_ISBN13, ZBAR_CFG_ENABLE, 1); Image image(grayImage->width, grayImage->height, "GREY", grayImage->imageData, grayImage->width * grayImage->height); // scan the image for barcodes int n = scanner.scan(image); // extract results for(Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol) { if(strcmp(symbol->get_type_name().c_str(), "ISBN-13") == 0) { strcpy(code, const_cast<char *>(symbol->get_data().c_str())); return true; } } // clean up image.set_data(NULL, 0); return false; }
とりあえずGoogle Bookからデータも引っ張ってきてみる.
char code[13]; if(findBarcode(capFrame, code)) { cout << code << endl; System::Net::WebClient wc; System::String^ strCode = gcnew System::String(code); System::String^ bookdata = wc.DownloadString("http://books.google.com/books?bibkeys=ISBN:" + strCode + "&jscmd=viewapi&callback=mycallback")->Replace("\\x26","&"); System::Console::WriteLine(bookdata); }
ネットワークは面倒だったので,CLSで誤魔化し始めていたりw
書籍とARなんてありがちなところだけど,あんなこんなできるといいなー,と考えるだけでも面白くなってくるw