{"id":4463,"date":"2015-03-13T18:02:05","date_gmt":"2015-03-13T09:02:05","guid":{"rendered":"http:\/\/kako.com\/blog\/?p=4463"},"modified":"2015-03-13T18:02:05","modified_gmt":"2015-03-13T09:02:05","slug":"oculus-rift-dk1%e3%81%a8ovrvision%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%a7ar%e9%9b%bb%e5%8d%93%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99","status":"publish","type":"post","link":"http:\/\/kako.com\/blog\/?p=4463","title":{"rendered":"Oculus Rift DK1\u3068Ovrvision\u30ab\u30e1\u30e9\u3067AR\u96fb\u5353\u3092\u52d5\u304b\u3059"},"content":{"rendered":"<p>\u4ee5\u524d\u3001<a href=\"http:\/\/www.kako.com\/neta\/2012-009\/2012-009.html\">AR\u96fb\u5353<\/a>\u3068\u3044\u3046\u30bd\u30d5\u30c8\u3092\u601d\u3044\u3064\u3044\u3066\u4f5c\u3063\u3066\u3044\u308b\u3002<br \/>\n\u305d\u308c\u3092<a href=\"http:\/\/kako.com\/blog\/?p=2547\">Oculus Rift DK1+Ovrvision\u30ab\u30e1\u30e9<\/a>\u7528\u306b\u79fb\u690d\u3057\u3066\u307f\u3066\u3044\u308b\u3002<br \/>\n<a href=\"http:\/\/kako.com\/blog\/?p=4404\">Ovrvision\u7528\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u30bd\u30d5\u30c8<\/a>\u3068\u5143\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5408\u4f53\u3055\u305b\u3066\u3068\u308a\u3042\u3048\u305a\u52d5\u304b\u3057\u3066\u307f\u305f\u3068\u3044\u3046\u30ec\u30d9\u30eb\u3067\u3001\u958b\u767a\u306e\u521d\u671f\u6bb5\u968e\u3060\u3063\u305f\u308a\u3059\u308b\u3002<br \/>\n<!--more--><\/p>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306f\u3053\u3093\u306a\u611f\u3058\u306b\u306a\u3063\u3066\u3044\u308b\u3002<br \/>\nOCR\u30e9\u30a4\u30d6\u30e9\u30eaTesseract\u306e\u51e6\u7406\u304c\u3061\u3087\u3063\u3068\u8ca0\u8377\u304c\u3042\u3063\u3066\u30d5\u30ec\u30fc\u30e0\u30ec\u30fc\u30c8\u3092\u843d\u3068\u3057\u3066\u3044\u308b\u6c17\u304c\u3059\u308b\u306e\u3067\u3001OCR\u51e6\u7406\u306e\u90e8\u5206\u3060\u3051\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u306b\u3057\u3066\u3001\u30d5\u30ec\u30fc\u30e0\u3092\u98db\u3070\u3057\u3066\u51e6\u7406\u3059\u308b\u5f62\u306b\u3057\u305f\u307b\u3046\u304c\u3088\u3055\u305d\u3046\u3060\u3002<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\/\/-----------------------------------------------------------------------------------\r\n\/\/ AR-Calc  (Augmented Reality Calculator) ver 0.1  by E.Kako @kako.com (c)2012-2015\r\n\/\/-----------------------------------------------------------------------------------\r\n\r\n\/\/ Standard header\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n#include &lt;string.h&gt;\r\n\r\n#include &quot;ovrvision.h&quot;\r\n#pragma comment( lib, &quot;ovrvision.lib&quot;)\r\n\r\n\/\/ tesseract Lib header\r\n#include &quot;baseapi.h&quot;\r\n#include &quot;strngs.h&quot;\r\n\r\n\/\/OpenCV Lib header\r\n#include &quot;opencv2\/opencv.hpp&quot;\r\n\r\n\/\/OpenCV Libs\r\n#pragma comment( lib, &quot;lib\/opencv_core242.lib&quot;)\r\n#pragma comment( lib, &quot;lib\/opencv_highgui242.lib&quot;)\r\n#pragma comment( lib, &quot;lib\/opencv_imgproc242.lib&quot;)\r\n\r\nint parse_expression(char *text,int pos,char *text2);\r\n\r\nOVR::Ovrvision* g_pOvrvision;\r\n\r\n\/\/------------------------------------------------------------------------------\r\n\/\/ Main program\r\n\/\/------------------------------------------------------------------------------\r\nint main()\r\n{\r\n\ttesseract::TessBaseAPI tessBaseApi;\r\n\r\n\ttessBaseApi.Init(&quot;.&quot;,&quot;eng&quot;);\r\n\ttessBaseApi.SetVariable(&quot;tessedit_char_whitelist&quot;, &quot;0123456789+-xX=&quot;); \/\/ limit char\r\n\t\r\n\tIplImage *image,*frame1,*frame2,*frame1_copy,*frame2_copy;\r\n\tIplImage *gray;\r\n\tCvRect rect1s,rect2s,rect1d,rect2d;\r\n\tint w,h,adj;\r\n\tCvFont fnt;\r\n\tchar buf[256];\r\n\tint y=0;\r\n\tint pos;\r\n\r\n\tg_pOvrvision = new OVR::Ovrvision();\r\n\tif (g_pOvrvision-&gt;Open(0,OVR::OV_CAMVGA_FULL)!=OV_RESULT_OK) {\r\n\t\tprintf(&quot;Ovrvision camera not found.\\n&quot;); getchar();\r\n\t\treturn -1;\r\n\t}\r\n\t\r\n\tw = g_pOvrvision-&gt;GetImageWidth();\r\n\th = g_pOvrvision-&gt;GetImageHeight();\r\n\tframe1 = cvCreateImage(cvSize(w,h), 8, 3);\r\n\tframe2 = cvCreateImage(cvSize(w,h), 8, 3);\r\n\tframe1_copy = cvCreateImage(cvSize(w,h), 8, 3);\r\n\tframe2_copy = cvCreateImage(cvSize(w,h), 8, 3);\r\n\timage = cvCreateImage(cvSize(w,h), 8, 3);\r\n\tgray = cvCreateImage(cvSize(w,h), 8, 1);\r\n\t\r\n\t\/\/ font init\r\n\tcvInitFont (&amp;fnt, CV_FONT_HERSHEY_SIMPLEX,1,1,0,2,CV_AA);\r\n\t\r\n\tadj = w\/32;\r\n\trect1s = cvRect(w\/4+adj,0, w\/2,h);\r\n\trect2s = cvRect(w\/4-adj,0, w\/2,h);\r\n\trect1d = cvRect(w\/2,0, w\/2,h);\r\n\trect2d = cvRect(0  ,0, w\/2,h);\r\n\t\r\n\tcvNamedWindow(&quot;image&quot;, 0);\r\n\tcvSetWindowProperty(&quot;image&quot;,CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN); \/\/ fullscreen\r\n\r\n\t\/\/ main loop\r\n\twhile(1) {\r\n\t\tif(cvWaitKey( 1 ) &gt;= 0) { break; } \/\/ any key to quit\r\n\t\t\r\n\t\t\/\/ get image\r\n\t\tg_pOvrvision-&gt;PreStoreCamData();\r\n\t\tg_pOvrvision-&gt;GetCamImage((unsigned char *)frame1-&gt;imageData,OVR::OV_CAMEYE_LEFT);\r\n\t\tg_pOvrvision-&gt;GetCamImage((unsigned char *)frame2-&gt;imageData,OVR::OV_CAMEYE_RIGHT);\r\n\t\tcvCvtColor(frame1,frame1_copy,CV_RGB2BGR);\r\n\t\tcvCvtColor(frame2,frame2_copy,CV_RGB2BGR);\r\n\t\tcvFlip(frame1_copy,NULL, -1); \/\/ flip\r\n\t\tcvFlip(frame2_copy,NULL, -1); \/\/ flip\r\n\t\t\r\n\t\tcvSetImageROI(frame1_copy,rect1s);\r\n\t\tcvSetImageROI(image,rect1d);\r\n\t\tcvCopy(frame1_copy, image);\r\n\t\t\r\n\t\tcvSetImageROI(frame2_copy,rect2s);\r\n\t\tcvSetImageROI(image,rect2d);\r\n\t\tcvCopy(frame2_copy, image);\r\n\t\t\r\n\t\tcvResetImageROI(image);\r\n\t\tcvResetImageROI(frame1_copy);\r\n\t\tcvResetImageROI(frame2_copy);\r\n\t\t\r\n\t\tcvCvtColor( frame1_copy, gray, CV_RGB2GRAY); \/\/ convert to grayscale\r\n\t\t\r\n\t\t\/\/ OCR Tesseract\r\n\t\t{\r\n\t\t\tchar *text = tessBaseApi.TesseractRect( \r\n\t\t\t\t(unsigned char *)gray-&gt;imageData, gray-&gt;nChannels, gray-&gt;widthStep,\r\n\t\t\t\t0, 0, gray-&gt;width, gray-&gt;height);\r\n\t\t\tpos=0; y=0;\r\n\t\t\twhile (1) {\r\n\t\t\t\tint ret;\r\n\t\t\t\tret = parse_expression(text,pos,buf);\r\n\t\t\t\tif ((ret== -1)||(buf[0]=='&#92;&#48;')||(buf==NULL)) { break; }\r\n\t\t\t\tpos=ret;\r\n\t\t\t\tcvPutText(image, buf , cvPoint(50, 50+y), &amp;fnt, CV_RGB(255,0,0));\r\n\t\t\t\ty+=50;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tcvShowImage(&quot;image&quot;, image); \/\/ display\r\n\t}\r\n\t\r\n\t\/\/ close\r\n\tg_pOvrvision-&gt;Close();\r\n\tcvDestroyAllWindows();\r\n\t\/\/ release\r\n\tcvReleaseImage(&amp;gray);\r\n\tcvReleaseImage(&amp;image);\r\n\tcvReleaseImage(&amp;frame1);\r\n\tcvReleaseImage(&amp;frame2);\r\n\tcvReleaseImage(&amp;frame1_copy);\r\n\tcvReleaseImage(&amp;frame2_copy);\r\n\t\r\n\treturn 0;\r\n}\r\n\r\nint parse_expression(char *text,int pos,char *text2)\r\n{\r\n\tint len,n,f;\r\n\tint i,j,k;\r\n\tint a,b,op,result;\r\n\tchar c;\r\n\tstatic char buf[256];\r\n\t\r\n\tlen=strlen(text);\r\n\twhile (pos&lt;len) {\r\n\t\tn=0;\r\n\t\t\r\n\t\tf=0;\r\n\t\tfor (i=pos;i&lt;len;i++) {\r\n\t\t\tc=text[i];\r\n\t\t\tif ((c=='\\r')||(c=='\\n')) { break; }\r\n\t\t\tif (c=='=') { f=1; } \/\/ found (=)\r\n\t\t\tn++;\r\n\t\t\tif (i&gt;254) { break; }\r\n\t\t}\r\n\t\t\r\n\t\ttext2[0]='&#92;&#48;';\r\n\t\tif (f==1) {\r\n\t\t\tj=0;\r\n\t\t\tk=0;\r\n\t\t\tfor (i=0;i&lt;n;i++) {\r\n\t\t\t\tc=text[pos+i];\r\n\t\t\t\tif ((i==0)&amp;&amp;(c=='+')) { continue; }\r\n\t\t\t\tif ((i==0)&amp;&amp;(c=='-')) { continue; }\r\n\t\t\t\tif ((i==0)&amp;&amp;(c=='x')) { continue; }\r\n\t\t\t\tif ((i==0)&amp;&amp;(c=='X')) { continue; }\r\n\t\t\t\tif ((i==0)&amp;&amp;(c=='=')) { continue; }\r\n\t\t\t\tif (c=='=') { break; }\r\n\t\t\t\tif (c=='+') { op=1; k=j; }\r\n\t\t\t\tif (c=='-') { op=2; k=j; }\r\n\t\t\t\tif (c=='x') { op=3; k=j; }\r\n\t\t\t\tif (c=='X') { op=3; k=j; }\r\n\t\t\t\tif (c==' ') { continue; }\r\n\t\t\t\tbuf[j++]=c;\r\n\t\t\t}\r\n\t\t\tbuf[j]='&#92;&#48;';\r\n\t\t\tif (k==0) {\r\n\t\t\t\tsscanf(buf,&quot;%d&quot;,&amp;result);\r\n\t\t\t} else {\r\n\t\t\t\tsscanf(buf,&quot;%d&quot;,&amp;a);\r\n\t\t\t\tsscanf(buf+k+1,&quot;%d&quot;,&amp;b);\r\n\t\t\t\tif (op==1) { result = a+b; }\r\n\t\t\t\tif (op==2) { result = a-b; }\r\n\t\t\t\tif (op==3) { result = a*b; }\r\n\t\t\t}\r\n\t\t\tsprintf(buf,&quot;%s = %d&quot;,buf, result);\r\n\t\t\tstrcpy(text2,buf);\r\n\t\t}\r\n\t\tpos += (n+1);\r\n\t\treturn pos;\r\n\t}\r\n\treturn -1;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u4ee5\u524d\u3001AR\u96fb\u5353\u3068\u3044\u3046\u30bd\u30d5\u30c8\u3092\u601d\u3044\u3064\u3044\u3066\u4f5c\u3063\u3066\u3044\u308b\u3002 \u305d\u308c\u3092Oculus Rift DK1+Ovrvision\u30ab\u30e1\u30e9\u7528\u306b\u79fb\u690d\u3057\u3066\u307f\u3066\u3044\u308b\u3002 Ovrvision\u7528\u30ad\u30e3\u30d7\u30c1\u30e3\u30fc\u30bd\u30d5\u30c8\u3068\u5143\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5408\u4f53\u3055\u305b\u3066\u3068\u308a\u3042\u3048\u305a\u52d5\u304b [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[8,14],"tags":[],"_links":{"self":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4463"}],"collection":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4463"}],"version-history":[{"count":2,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4463\/revisions"}],"predecessor-version":[{"id":4465,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/4463\/revisions\/4465"}],"wp:attachment":[{"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4463"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kako.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}