Результат MediaWiki API

Это HTML-представление формата JSON. HTML хорош для отладки, но неудобен для практического применения.

Укажите параметр format для изменения формата вывода. Для отображения не-HTML-представления формата JSON, присвойте format=json.

См. полную документацию или справку API для получения дополнительной информации.

{
    "batchcomplete": "",
    "continue": {
        "gapcontinue": "RoboBrainMenu",
        "continue": "gapcontinue||"
    },
    "query": {
        "pages": {
            "2016": {
                "pageid": 2016,
                "ns": 0,
                "title": "RealRobot",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "[[Category:\u041f\u0440\u043e\u0435\u043a\u0442\u044b|\u041f\u0440\u043e\u0435\u043a\u0442\u044b]]\n[[\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435:RealRobot.jpg|thumb|200px|\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0440\u043e\u0431\u043e\u0442\u0430|right]]\n\n== \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ==\n\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0440\u0430\u0434\u0438\u043e\u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043e \u041f\u041a \u0438 \u0433\u043e\u0442\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0430 \u041f\u041a, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u043e\u0431\u043e\u0442\u043e\u043c \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u043f\u0440\u0438\u0432\u044b\u043a\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c (\u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e\u0431\u044b \u0438\u0437 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 COM-\u043f\u043e\u0440\u0442\u043e\u043c).\n\n== \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 ==\n\u0413\u0430\u0431\u0430\u0440\u0438\u0442\u044b: 85\u044585\u043c\u043c (\u0434\u043b\u0438\u043d\u0430 \u0445 \u0448\u0438\u0440\u0438\u043d\u0430), \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043b\u0435\u0441 - 80\u043c\u043c\n\n\u041c\u0438\u043a\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0430 \u0431\u043e\u0440\u0442\u0443: ATMega128\n\n\u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438: \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 RC-Servo\n\n\u0421\u0432\u044f\u0437\u044c \u0441 \u041f\u041a: Bluetooth\n\n\u041f\u0438\u0442\u0430\u043d\u0438\u0435: 4 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \"\u0410\u0410\"\n\n\u0421\u0435\u043d\u0441\u043e\u0440\u044b:\n* \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u044b 130 \u043a\u043b\u0438\u043a\u043e\u0432 \u043d\u0430 \u043e\u0431\u043e\u0440\u043e\u0442 \u043a\u043e\u043b\u0435\u0441\u0430;\n* \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 (\u0447\u0435\u0440\u043d\u0430\u044f/\u0431\u0435\u043b\u0430\u044f - 4 \u0448\u0442\u0443\u043a\u0438, \u043f\u043e \u0443\u0433\u043b\u0430\u043c);\n* \u0434\u0430\u0442\u0447\u0438\u043a \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0418\u041a-\u0434\u0430\u043b\u044c\u043d\u043e\u043c\u0435\u0440 SHARP;\n\n== \u0421\u0441\u044b\u043b\u043a\u0438 ==\n\n\u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 [http://www.realrobot.ru/ realrobot.ru]."
                    }
                ]
            },
            "3051": {
                "pageid": 3051,
                "ns": 0,
                "title": "Realsystem",
                "revisions": [
                    {
                        "contentformat": "text/x-wiki",
                        "contentmodel": "wikitext",
                        "*": "== \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 OpenCV \u0432 \u041e\u0421 Linux ==\n\n\u042f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0432 \u041e\u0421 Alt Linux \u0441 \u044f\u0434\u0440\u043e\u043c 2.6.\n\n\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438: [http://opencv.willowgarage.com/wiki/CompileOpenCVUsingLinux]\n\n\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b Linux, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a gcc, gcc4.1-c++, automake, autoconf. \u0412 \u0410\u043b\u044c\u0442 \u041b\u0438\u043d\u0443\u043a\u0441\u0435 \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e apt-get install. \u0417\u0430\u0442\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c cmake \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0441\u0431\u043e\u0440\u043a\u0435 OpenCV.\n<blockquote>\nmkdir vision;cd vision<br/>\nwget http://www.cmake.org/files/v2.8/cmake-2.8.2.tar.gz<br/>\ntar -zxf cmake-2.8.2.tar.gz;cd cmake-2.8.2<br/>\n./bootstrap; make; sudo make install<br/>\ncd ../<br/>\nwget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.1/OpenCV-2.1.0.tar.bz2?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fopencvlibrary%2Ffiles%2Fopencv-unix%2F2.1%2F&ts=1281621769&mirror=citylan<br/>\ntar -jxf OpenCV-2.1.0.tar.bz2;cd OpenCV-2.1.0<br/>\nmkdir release;cd release<br/>\ncmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_PYTHON_SUPPORT=ON -D BUILD_EXAMPLES=ON ..; make; sudo make install\n</blockquote>\n\u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443.\n<blockquote>\nsudo echo \"/usr/local/lib\" > /etc/ld.conf.d/opencv.conf<br/>\nsudo ldconfig\n</blockquote>\n\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c OpenCV. \u042f \u0432\u0437\u044f\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 [http://roboforum.ru/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_cvQCodeBeacons] \u0438 \u0441\u0434\u0435\u043b\u0430\u043b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u044f\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u043a\u0435\u0442 libgtk+2-devel\n\n<source lang=\"cpp\">\n#pragma hdrstop\n#include \"CvQCodeBeacons.h\"\n#pragma package(smart_init)\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <stdio.h>\n#include <math.h>\n\n\n \ndouble angleF(char* datas, long int steps, CvSize szSrc, int bx,int by,int dx1,int dy1,int dx2,int dy2,int l, int b){\n  double inner=0, outer=0;\n  double d1=sqrt(dx1*dx1+dy1*dy1);\n  double d2=sqrt(dx2*dx2+dy2*dy2);\n  double dx1n=dx1/d1, dy1n=dy1/d1;\n  double dx2n=dx2/d2, dy2n=dy2/d2;\n  for(int j=1; j<=b; j++){\n  for(int i=1; i<=l; i++){\n    long int adr,d_x,d_y;\n    d_x=bx+j*(dx1n+dx2n)+i*dx1n;\n    d_y=by+j*(dy1n+dy2n)+i*dy1n;\n    if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n      inner+=0;\n    }else{\n      adr=d_x*3+(szSrc.height-d_y)*steps+2;\n      inner+=datas[adr];\n    };\n    d_x=bx+j*(dx1n+dx2n)+i*dx2n;\n    d_y=by+j*(dy1n+dy2n)+i*dy2n;\n    if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n      inner+=0;\n    }else{\n      adr=d_x*3+(szSrc.height-d_y)*steps+2;\n      inner+=datas[adr];\n    };\n    d_x=bx-j*(dx1n+dx2n)+i*dx1n;\n    d_y=by-j*(dy1n+dy2n)+i*dy1n;\n    if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n      outer+=0;\n    }else{\n      adr=d_x*3+(szSrc.height-d_y)*steps+2;\n      outer+=datas[adr];\n    };\n    d_x=bx-j*(dx1n+dx2n)+i*dx2n;\n    d_y=by-j*(dy1n+dy2n)+i*dy2n;\n    if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n      outer+=0;\n    }else{\n      adr=d_x*3+(szSrc.height-d_y)*steps+2;\n      outer+=datas[adr];\n    };\n  };};\n  return outer-inner;\n};\n \ndouble sqr(double a){\n  return a*a;\n};\n \nCvQCodeBeacon* mycvGetQCodeBeacons(IplImage *img, int ThresholdSteps, double k_front, double k_side){\n  CvQCodeBeacon* fbeacon = NULL;\n \n  CvSize szSrc; szSrc.width=img->width; szSrc.height=img->height;\n  CvSize szDiv2; szDiv2.width=szSrc.width/2; szDiv2.height=szSrc.height/2;\n \n  IplImage* pyr = cvCreateImage(szDiv2, IPL_DEPTH_8U, 3);\n  IplImage* tmp = cvCreateImage(szSrc, IPL_DEPTH_8U, 3);\n\n  cvPyrDown( img, pyr, 7 );\n  cvPyrUp(   pyr, tmp, 7 );\n \n  IplImage*  gray = cvCreateImage( szSrc, 8, 1 );\n  IplImage* tgray = cvCreateImage( szSrc, 8, 1 );\n \n  cvSetImageCOI( tmp, 2 );\n  cvCopy( tmp, tgray, 0 );\n \n  CvMemStorage* storage=cvCreateMemStorage(0);\n  CvSeq* contours, result;\n \n  for(int l=0; l<ThresholdSteps; l++){\n    if(l==0){\n      cvCanny( tgray, gray, 0, 100, 5 );\n      cvDilate( gray, gray, 0, 1 );\n    }else{\n      cvThreshold( tgray, gray, (l+1)*255/ThresholdSteps, 255, CV_THRESH_BINARY );\n    };\n \n    cvFindContours( gray, storage, &contours, sizeof(CvContour),\n                    CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );\n \n    while( contours )\n    {\n      CvSeq* result = cvApproxPoly( contours, sizeof(CvContour), storage,\n      CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0 );\n \n      int count = result->total;\n\n      if(\n        count == 4 \n        && fabs(cvContourArea(result,CV_WHOLE_SEQ)) > 100 \n        && cvCheckContourConvexity(result) \n      ){\n        int isPara=1;\n \n        double x[5],y[5];\n        for(int i=0; i < count; i++){\n          CvPoint *pt=(CvPoint*)cvGetSeqElem( result, i );\n          x[i]=pt->x;\n          y[i]=szSrc.height-pt->y;\n        }; x[count]=x[0]; y[count]=y[0];\n \n        double l[5];\n        for(int i=1; i<=4; i++){\n          l[i]=sqrt(sqr(x[i-1]-x[i])+sqr(y[i-1]-y[i]));\n        };\n\n        if( fabs(l[1]/(l[1]+l[3])-0.5)>0.1 ){ isPara=0; };\n        if( fabs(l[2]/(l[2]+l[4])-0.5)>0.1 ){ isPara=0; };\n        if( fabs(l[2]/(l[2]+l[3])-0.5)>0.2 ){ isPara=0; };\n        if( l[1]+l[2]>800 ){ isPara=0; };\n \n\n        double s_mul=(x[1]-x[0])*(x[2]-x[1])+(y[1]-y[0])*(y[2]-y[1]);\n        double cos_a=s_mul/(l[1]*l[2]);\n        if( cos_a > 0.3 ){ isPara=0; };\n \n        if( isPara ){\n          double cx=(x[0]+x[1]+x[2]+x[3])/4;\n          double cy=(y[0]+y[1]+y[2]+y[3])/4;\n          CvQCodeBeacon *bc=fbeacon;\n          while( bc ){\n            double dist=sqrt(sqr(cx-bc->x)+sqr(cy-bc->y));\n            if( dist<5 ){ isPara=0; }; \n            bc=bc->next;\n          };\n        };\n \n        if( isPara ){\n          double idx1,idy1,idx2,idy2,idx3,idy3;\n \n          char* datas=tmp->imageDataOrigin;\n          long int steps=tmp->widthStep;\n \n          double v1x=x[1]-x[2], v1y=y[1]-y[2];\n          double v2x=x[3]-x[2], v2y=y[3]-y[2];\n \n          int area=5;\n          int L=8;\n          int B=3;\n          \n          double wasmax=0;\n          for(long int dx1=-area; dx1<=area; dx1++){\n          for(long int dy1=-area; dy1<=area; dy1++){\n            double a=angleF(datas,steps,szSrc,x[1]+dx1,y[1]+dy1,-v1x,-v1y,v2x,v2y,L,B);\n            if(a>wasmax){\n              idx1=dx1; idy1=dy1;\n              wasmax=a;\n            };\n          };};\n \n          wasmax=0;\n          for(long int dx2=-area; dx2<=area; dx2++){\n          for(long int dy2=-area; dy2<=area; dy2++){\n            double a=angleF(datas,steps,szSrc,x[2]+dx2,y[2]+dy2,v1x,v1y,v2x,v2y,L,B);\n            if(a>wasmax){\n              idx2=dx2; idy2=dy2;\n              wasmax=a;\n            };\n          };};\n \n          wasmax=0;\n          for(long int dx3=-area; dx3<=area; dx3++){\n          for(long int dy3=-area; dy3<=area; dy3++){\n            double a=angleF(datas,steps,szSrc,x[3]+dx3,y[3]+dy3,v1x,v1y,-v2x,-v2y,L,B);\n            if(a>wasmax){\n              idx3=dx3; idy3=dy3;\n              wasmax=a;\n            };\n          };};\n \n          double res[7][7];\n          int K=7;\n \n          double base_x=x[2]+idx2, base_y=y[2]+idy2;\n          v1x=x[1]-x[2]+idx1-idx2, v1y=y[1]-y[2]+idy1-idy2;\n          v2x=x[3]-x[2]+idx3-idx2, v2y=y[3]-y[2]+idy3-idy2;\n \n          double vmax=0,vmin=255;\n \n            for(long int d1=0; d1<K; d1++){\n            for(long int d2=0; d2<K; d2++){\n              long int d_x=base_x+(0.5+d1)*v1x/K+(0.5+d2)*v2x/K;\n              long int d_y=base_y+(0.5+d1)*v1y/K+(0.5+d2)*v2y/K;\n              if( d_x<0 || d_x>szSrc.width || d_y<0 || d_y>szSrc.height ){\n                res[d1][d2]=1000;\n              }else{\n                long int adr=d_x*3+(szSrc.height-d_y)*steps+2;\n                res[d1][d2]=datas[adr];\n              };\n              if( res[d1][d2]>vmax ){ vmax=res[d1][d2]; };\n              if( res[d1][d2]<vmin ){ vmin=res[d1][d2]; };\n            };};\n \n            for(int d1=0; d1<K; d1++){\n              for(int d2=0; d2<K; d2++){\n                res[d1][d2]= res[d1][d2]<(vmax+vmin)/2 ? 1 : 0;\n        if (res[d1][d2] == 0) res[d1][d2] = 1;\n            else res[d1][d2] = 0;\n              };\n            };\n \n            int isGood=1;\n \n            for(int i=0; i<K; i++){\n              if( res[0][i]==0 ){ isGood=0; i=K; };\n              if( res[K-1][i]==0 ){ isGood=0; i=K; };\n              if( res[i][0]==0 ){ isGood=0; i=K; };\n              if( res[i][K-1]==0 ){ isGood=0; i=K; };\n            };\n \n            if( res[1][1]+res[5][1]+res[5][5]+res[1][5] != 1 ){ isGood=0; };\n            if( isGood==1 ){\n              double tmp[7][7];\n              for(int d1=0; d1<K; d1++){\n              for(int d2=0; d2<K; d2++){\n                int dd1=res[1][1]+res[1][5]==1 ? d1 : K-1-d1;\n                int dd2=res[1][1]+res[5][1]==1 ? d2 : K-1-d2;\n                tmp[d1][d2]=res[dd1][dd2];\n              };};\n \n              for(int d1=0; d1<K; d1++){\n              for(int d2=0; d2<K; d2++){\n                int dd1=tmp[1][2]==1 ? d1 : d2;\n                int dd2=tmp[1][2]==1 ? d2 : d1;\n                res[d1][d2]=tmp[dd1][dd2];\n              };};\n \n              int code[20]; for(int i=0; i<20; i++){ code[i]=0; };\n \n              long int beacon=0;\n              if( isGood==1 ){\n                int checkbits=0;\n                for(int i=2; i<=4; i++){ code[i-1]=res[5][i]; };\n                for(int i=1; i<=5; i++){ code[i+3]=res[4][i]; code[i+8]=res[3][i]; };\n                for(int i=2; i<=5; i++){ code[i+12]=res[2][i]; };\n                for(int i=3; i<=4; i++){ code[i+15]=res[1][i]; };\n                for(int j=0; j<5; j++){\n                  int bits=0;\n                  for(int i=0; i<4; i++){ bits = (bits << 1) + code[j*4+i]; };\n                  checkbits = checkbits ^ bits;\n                  if( j<4 ){ beacon = (beacon << 4) + bits; };\n                };\n                if( checkbits != 13 ){ isGood=0; printf(\"checkbits=%d\\n\", checkbits);};\n              };\n              if( isGood==1 ){\n                CvQCodeBeacon* cur=fbeacon;\n                while( cur && cur->next && cur->id != beacon ){ cur=cur->next; };\n                if( !cur ){\n                  cur=new CvQCodeBeacon();\n                  fbeacon=cur;\n                  cur->next=NULL;\n                }else if( cur->id != beacon ){\n                  cur->next=new CvQCodeBeacon();\n                  cur=cur->next;\n                  cur->next=NULL;\n                };\n                cur->id=beacon;\n                cur->x=base_x+(v1x+v2x)/2;\n                cur->y=base_y+(v1y+v2y)/2;\n                cur->bx=base_x;\n                cur->by=base_y;\n                cur->x1=v1x;\n                cur->y1=v1y;\n                cur->x2=v2x;\n                cur->y2=v2y;\n                long double size=sqrt(sqr(v1x+v2x)+sqr(v1y+v2y));\n \n                cur->rx=k_front*szDiv2.width/size;\n                cur->ry=((cur->x) - szDiv2.width)*(cur->rx)/(szDiv2.width*k_side);\n                cur->rz=((cur->y) - szDiv2.height)*(cur->rx)/(szDiv2.width*k_side);\n \n                cur->d=sqrt(sqr(cur->rx)+sqr(cur->ry)+sqr(cur->rz));\n                cur->d=floor(cur->d*100)/100;\n        printf(\"beacon=%d\\n\", cur->id);\n            for(int d1=K-1; d1>=0; d1--){\n              for(int d2=0; d2<K; d2++)\n        {\n            printf(\"%d \", (int)res[d1][d2]);\n        }\n        printf(\"\\n\");\n        }\n              };\n            };\n \n        };\n      };\n      contours = contours->h_next;\n    };\n  };\n \n  cvReleaseMemStorage( &storage );\n \n  cvReleaseImage(&pyr);\n  cvReleaseImage(&tmp);\n  cvReleaseImage(&gray);\n  cvReleaseImage(&tgray);\n \n  return fbeacon;\n };\n\nint main(int argc, char *argv[])\n{\n  IplImage* img = 0; \n  int height,width,step,channels;\n  uchar *data;\n  int i,j,k;\n\n  if(argc<2){\n    printf(\"Usage: main <image-file-name>\\n\\7\");\n    exit(0);\n  }\n\n  // load an image  \n  img=cvLoadImage(argv[1]);\n  if(!img){\n    printf(\"Could not load image file: %s\\n\",argv[1]);\n    exit(0);\n  }\n\n  // get the image data\n  height    = img->height;\n  width     = img->width;\n  step      = img->widthStep;\n  channels  = img->nChannels;\n  data      = (uchar *)img->imageData;\n  printf(\"Processing a %dx%d image with %d channels\\n\",height,width,channels); \n\n  // create a window\n  cvNamedWindow(\"mainWin\", CV_WINDOW_AUTOSIZE); \n  cvMoveWindow(\"mainWin\", 100, 100);\n\n  // invert the image\n  //for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)\n    //data[i*step+j*channels+k]=255-data[i*step+j*channels+k];\n\n  mycvGetQCodeBeacons(img, 5, 0.438, 2.813);\n  // show the image\n  cvShowImage(\"mainWin\", img );\n\n  // wait for a key\n  cvWaitKey(0);\n\n  // release the image\n  cvReleaseImage(&img );\n  return 0;\n}\n</source>\n\n<source lang=\"cpp\">\n#ifndef cvQCodeBeaconsH\n#define cvQCodeBeaconsH\n//---------------------------------------------------------------------------\n#include \"cv.h\"                                  // includes OpenCV definitions\n#include \"highgui.h\"                             // includes highGUI definitions\n \n struct CvQCodeBeacon {\n \n  long int id;\n \n  long double rx,ry,rz; \n  long double x,y,z; \n  long double d; \n \n  long double bx,by; \n  long double x1,y1,x2,y2; \n \n  CvQCodeBeacon* next; \n };\n \n CvQCodeBeacon* mycvGetQCodeBeacons(IplImage *img, int ThresholdSteps, double k_front, double k_side);\n \n#endif\n\n</source>\n\n\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439:\n<blockquote>\ng++ CvQCodeBeacons.cpp -o qcode -I /usr/local/include/opencv/ -L /usr/local/lib -lm -lcv -lhighgui -lcvaux\n</blockquote>\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:\n<blockquote>\n./qcode QCodeBeacon.jpg\n</blockquote>\n\n\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:\n[http://lh3.ggpht.com/_cFebWj0ROZk/TGQKPul4UvI/AAAAAAAABRM/VwUlxESd4P4/opencv.JPG]"
                    }
                ]
            }
        }
    }
}