{"id":9221,"date":"2016-12-02T07:53:44","date_gmt":"2016-12-02T12:53:44","guid":{"rendered":"httpss:\/\/www.powenko.com\/wordpress\/?p=9221"},"modified":"2018-03-25T01:39:34","modified_gmt":"2018-03-25T06:39:34","slug":"01-traindata","status":"publish","type":"post","link":"https:\/\/www.powenko.com\/wordpress\/?p=9221","title":{"rendered":"01 trainData"},"content":{"rendered":"<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n#include &lt;iostream&gt;\r\n#include &lt;opencv2\/core\/core.hpp&gt;\r\n#include &lt;opencv2\/highgui\/highgui.hpp&gt;\r\n#include &lt;opencv2\/opencv.hpp&gt;\r\nusing namespace cv;\r\nusing namespace std;\r\n\r\nconst int train_samples = 1;\r\nconst int classes = 10;\r\nconst int sizex = 20;\r\nconst int sizey = 30;\r\nconst int ImageSize = sizex * sizey;\r\nchar pathToImages&#x5B;] = \"\/Users\/powenko\/Desktop\/\u975c\u5b9c\u5927\u5b78\/20161001-\u8ab2\u7a0b-\u7121\u4eba\u6a5f\u5b89\u5168\u76e3\u63a7\/OpenCV\/opencv\/XCode\/06OCR\/sample11_OCR1\/test\";\r\n\r\nvoid PreProcessImage(Mat *inImage,Mat *outImage,int sizex, int sizey);\r\nvoid LearnFromImages(CvMat* trainData, CvMat* trainClasses);\r\nvoid RunSelfTest(KNearest&amp; knn2);\r\nvoid AnalyseImage(KNearest knearest);\r\n\/** @function main *\/\r\nint main(int argc, char** argv)\r\n{\r\n\r\nCvMat* trainData = cvCreateMat(classes * train_samples,ImageSize, CV_32FC1);\r\nCvMat* trainClasses = cvCreateMat(classes * train_samples, 1, CV_32FC1);\r\n\r\nnamedWindow(\"single\", CV_WINDOW_AUTOSIZE);\r\nnamedWindow(\"all\",CV_WINDOW_AUTOSIZE);\r\n\r\nLearnFromImages(trainData, trainClasses);\r\n\r\nKNearest knearest(trainData, trainClasses);\r\n\r\nRunSelfTest(knearest);\r\n\r\ncout &lt;&lt; \"losgehtsn\";\r\n\r\nAnalyseImage(knearest);\r\n\r\nreturn 0;\r\n\r\n}\r\n\r\nvoid PreProcessImage(Mat *inImage,Mat *outImage,int sizex, int sizey)\r\n{\r\nMat grayImage,blurredImage,thresholdImage,contourImage,regionOfInterest;\r\n\r\nvector&lt;vector&lt;Point&gt; &gt; contours;\r\n\r\ncvtColor(*inImage,grayImage , COLOR_BGR2GRAY);\r\n\r\nGaussianBlur(grayImage, blurredImage, Size(5, 5), 2, 2);\r\nadaptiveThreshold(blurredImage, thresholdImage, 255, 1, 1, 11, 2);\r\n\r\nthresholdImage.copyTo(contourImage);\r\n\r\nfindContours(contourImage, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);\r\n\r\nint idx = 0;\r\nsize_t area = 0;\r\nfor (size_t i = 0; i &lt; contours.size(); i++)\r\n{\r\nif (area &lt; contours&#x5B;i].size() )\r\n{\r\nidx = i;\r\narea = contours&#x5B;i].size();\r\n}\r\n}\r\n\r\nRect rec = boundingRect(contours&#x5B;idx]);\r\n\r\nregionOfInterest = thresholdImage(rec);\r\n\r\nresize(regionOfInterest,*outImage, Size(sizex, sizey));\r\n\r\n}\r\n\r\nvoid LearnFromImages(CvMat* trainData, CvMat* trainClasses)\r\n{\r\nMat img;\r\nchar file&#x5B;255];\r\nfor (int i = 0; i &lt; classes; i++)\r\n{\r\nsprintf(file, \"%s\/%d.png\", pathToImages, i);\r\nimg = imread(file, 1);\r\nif (!img.data)\r\n{\r\ncout &lt;&lt; \"File \" &lt;&lt; file &lt;&lt; \" not foundn\";\r\nexit(1);\r\n}\r\nMat outfile;\r\nPreProcessImage(&amp;img, &amp;outfile, sizex, sizey);\r\nfor (int n = 0; n &lt; ImageSize; n++)\r\n{\r\ntrainData-&gt;data.fl&#x5B;i * ImageSize + n] = outfile.data&#x5B;n];\r\n}\r\ntrainClasses-&gt;data.fl&#x5B;i] = i;\r\n}\r\n\r\n}\r\n\r\nvoid RunSelfTest(KNearest&amp; knn2)\r\n{\r\nMat img;\r\nCvMat* sample2 = cvCreateMat(1, ImageSize, CV_32FC1);\r\n\/\/ SelfTest\r\nchar file&#x5B;255];\r\nint z = 0;\r\nwhile (z++ &lt; 10)\r\n{\r\nint iSecret = rand() % 10;\r\n\/\/cout &lt;&lt; iSecret;\r\nsprintf(file, \"%s\/%d.png\", pathToImages, iSecret);\r\nimg = imread(file, 1);\r\nMat stagedImage;\r\nPreProcessImage(&amp;img, &amp;stagedImage, sizex, sizey);\r\nfor (int n = 0; n &lt; ImageSize; n++)\r\n{\r\nsample2-&gt;data.fl&#x5B;n] = stagedImage.data&#x5B;n];\r\n}\r\nfloat detectedClass = knn2.find_nearest(sample2, 1);\r\nif (iSecret != (int) ((detectedClass)))\r\n{\r\ncout &lt;&lt; \"Falsch. Ist \" &lt;&lt; iSecret &lt;&lt; \" aber geraten ist \"\r\n&lt;&lt; (int) ((detectedClass));\r\nexit(1);\r\n}\r\ncout &lt;&lt; \"Richtig \" &lt;&lt; (int) ((detectedClass)) &lt;&lt; \"n\";\r\nimshow(\"single\", img);\r\n\/\/waitKey(0);\r\n}\r\n\r\n}\r\n\r\nvoid AnalyseImage(KNearest knearest)\r\n{\r\n\r\nCvMat* sample2 = cvCreateMat(1, ImageSize, CV_32FC1);\r\n\r\nMat image, gray, blur, thresh;\r\n\r\nvector &lt; vector&lt;Point&gt; &gt; contours;\r\nstd::string tPath=pathToImages;\r\ntPath.append(\"\/buchstaben.png\");\r\nimage = imread(tPath, 1);\r\n\r\ncvtColor(image, gray, COLOR_BGR2GRAY);\r\nGaussianBlur(gray, blur, Size(5, 5), 2, 2);\r\nadaptiveThreshold(blur, thresh, 255, 1, 1, 11, 2);\r\nfindContours(thresh, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);\r\n\r\nfor (size_t i = 0; i &lt; contours.size(); i++)\r\n{\r\nvector &lt; Point &gt; cnt = contours&#x5B;i];\r\nif (contourArea(cnt) &gt; 50)\r\n{\r\nRect rec = boundingRect(cnt);\r\nif (rec.height &gt; 28)\r\n{\r\nMat roi = image(rec);\r\nMat stagedImage;\r\nPreProcessImage(&amp;roi, &amp;stagedImage, sizex, sizey);\r\nfor (int n = 0; n &lt; ImageSize; n++)\r\n{\r\nsample2-&gt;data.fl&#x5B;n] = stagedImage.data&#x5B;n];\r\n}\r\nfloat result = knearest.find_nearest(sample2, 1);\r\nrectangle(image, Point(rec.x, rec.y),\r\nPoint(rec.x + rec.width, rec.y + rec.height),\r\nScalar(0, 0, 255), 2);\r\n\r\nimshow(\"all\", image);\r\ncout &lt;&lt; result &lt;&lt; \"n\";\r\n\r\nimshow(\"single\", stagedImage);\r\nwaitKey(0);\r\n}\r\n\r\n}\r\n\r\n}\r\n}\r\n\r\n<\/pre>\n<p><a href=\"httpss:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-9222\" src=\"httpss:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-570x333.png\" alt=\"screen-shot-2016-12-02-at-8-51-13-pm\" width=\"570\" height=\"333\" srcset=\"https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-570x333.png 570w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-300x175.png 300w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-316x184.png 316w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-120x70.png 120w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-210x123.png 210w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-496x290.png 496w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM-140x82.png 140w, https:\/\/www.powenko.com\/wordpress\/wp-content\/uploads\/2016\/12\/Screen-Shot-2016-12-02-at-8.51.13-PM.png 603w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;iostream&gt; #include &lt;opencv2\/core\/cor [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":9222,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[339],"tags":[],"class_list":["post-9221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ch07-ocr"],"_links":{"self":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9221"}],"collection":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9221"}],"version-history":[{"count":3,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9221\/revisions"}],"predecessor-version":[{"id":11731,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9221\/revisions\/11731"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=\/wp\/v2\/media\/9222"}],"wp:attachment":[{"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.powenko.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}