答題卡圖像識(shí)別需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)-創(chuàng)新互聯(lián)

答題卡圖像識(shí)別

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),坡頭企業(yè)網(wǎng)站建設(shè),坡頭品牌網(wǎng)站建設(shè),網(wǎng)站定制,坡頭網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,坡頭網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

一、需求分析

一、以接口的方式開發(fā)此需求:

1:接收?qǐng)D片

   以上傳的方式把圖片發(fā)送到接口。

2:識(shí)別圖片

   接口接收到圖片后,進(jìn)行圖像識(shí)別。

3:返回?cái)?shù)據(jù)

   返回識(shí)別后的JSON格式數(shù)據(jù)。

二、答題卡圖片識(shí)別的具體要求:

圖片是通過手機(jī)、相機(jī)、掃描儀等設(shè)備拍照而來,其中手機(jī)、相機(jī)拍出的照片會(huì)出現(xiàn)像素低、圖像不正、聚焦不清楚等問題;

1:圖片只要是人眼能看清楚的即可完成識(shí)別;
2:800萬(wàn)像素以上的手機(jī)拍的照片能進(jìn)行識(shí)別;
3:聚焦不清楚時(shí)也可以進(jìn)行識(shí)別;

4:不符合要求的圖片可以不識(shí)別,一旦識(shí)別,正確率必須保證100%。

三、其他要求:

1:此項(xiàng)目驗(yàn)收需要提供答題卡識(shí)別的所有源代碼、接口說明文檔。

2:接口需支持單張圖片上傳識(shí)別以及多張圖片的上傳識(shí)別。

3:接口使用的開發(fā)語(yǔ)言及開發(fā)工具不限。

四、需求分析:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)   這是一個(gè)典型的“機(jī)器視覺”應(yīng)用。其中,答題卡的樣式可以是由自己來設(shè)置的,圖片的獲取方式提到了可以是“手機(jī)拍照、相機(jī)拍照”這種比較方便的方式;本例的一個(gè)特殊的要求是:你可以識(shí)別不出來,但是你不能識(shí)別錯(cuò)誤,這是項(xiàng)目的特殊要求

五、需求分析:

普通的答題卡是這樣的:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

用于機(jī)器識(shí)別的答題卡是這樣的,最明顯的區(qū)別在于在邊界處提供了用于標(biāo)定的黑邊。由于這里的答題卡是可以自己來設(shè)計(jì)的,就應(yīng)該設(shè)計(jì)得最適合識(shí)別:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

經(jīng)過我修改的答題卡是這樣的,主要是用圓點(diǎn)進(jìn)行邊界標(biāo)定,因?yàn)樵谛D(zhuǎn)和縮放的情況下,圓點(diǎn)都有更好的性能:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

二、市場(chǎng)分析

答題卡已經(jīng)出現(xiàn)好多年了,而且教育機(jī)構(gòu)也是容易出現(xiàn)壁壘的領(lǐng)域。經(jīng)過簡(jiǎn)單調(diào)查,制式的答題機(jī)應(yīng)該是這種樣子的,這種答題機(jī)采用的應(yīng)該特殊的成像技術(shù),比如紅外之類的,否則也不需要做成這種樣子:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

其價(jià)格在數(shù)千元到萬(wàn)元左右,淘寶上也有人做出了機(jī)器識(shí)別的例子:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

采用普通攝像頭和特定的支架,銷售情況不好。

但是,圖像確是多種多樣的。

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

   形式多樣。值得關(guān)注的一點(diǎn)是,這些能夠通過baidu直接搜索得到的答題卡在設(shè)計(jì)上和本文提供的答題開有兩點(diǎn)比較大的不同,一個(gè)是在取消了比如圓點(diǎn)這樣的標(biāo)定點(diǎn),二個(gè)是在橫版面上采用了“點(diǎn)畫”的方式進(jìn)行標(biāo)定

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)

這樣能夠得到的結(jié)果還是使得答題卡更加的簡(jiǎn)潔,美觀。

   對(duì)于這個(gè)市場(chǎng),我認(rèn)為在網(wǎng)絡(luò)和即時(shí)聊天工具更加發(fā)達(dá)的今天,答題卡作為一種非常正式的考試方法,還是有其市場(chǎng)的(比如高考中考,短時(shí)間內(nèi)還不會(huì)出現(xiàn)直接采用移動(dòng)設(shè)備進(jìn)行答卷);但是專門去做一套這樣的設(shè)備,市場(chǎng)已經(jīng)基本飽和,而且教育市場(chǎng)的壁壘應(yīng)該很高,不是很容易就能夠進(jìn)入的。但是,對(duì)于在日常非正式考試中需要答題卡相關(guān)設(shè)備,而不希望擔(dān)負(fù)一套昂貴的專業(yè)系統(tǒng)的人或單位來所,如果能夠以一種比較低廉的價(jià)格,并且已一種比較方便操作的方式(比如直接利用手機(jī),或普通相機(jī))進(jìn)行實(shí)現(xiàn),應(yīng)該是有一定的市場(chǎng)的。

三、技術(shù)實(shí)現(xiàn)

   本例的技術(shù)難度不是很大,非常關(guān)鍵的一點(diǎn)是由于卡片是可以由自己來設(shè)計(jì)的。而且圖像的獲取也比較容易被優(yōu)化。這里以最前面的圖片進(jìn)行設(shè)計(jì)分析,其他的例子情況可以以此類推;并且公布核心代碼。

1)仿照實(shí)際的情況,對(duì)原始圖片進(jìn)行相關(guān)處理。在實(shí)際拍攝的時(shí)候,可能會(huì)出現(xiàn)“縮放”、“透視變化”等影響最終實(shí)際結(jié)果的情況:

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)變小

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)透視變化

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)同時(shí)透視和縮放

2)編寫獲取錨點(diǎn)(就是圓點(diǎn))的函數(shù). FetchAnchorPoints函數(shù)的主要過程是將輸入的圖片劃分為四個(gè)部分,并且分別找到其中的圓點(diǎn)。參數(shù)中mattmp是模板圖片,也就是哪個(gè)小圓的圖片。

//獲得錨點(diǎn)
void FetchAnchorPoints(Mat src,Mat mattmp,Point &anchor01,Point &anchor02,Point &anchor03,Point &anchor04)
{
    Mat p_w_picpathmatch;
    Point minLoc;
    Point maxLoc01,maxLoc02,maxLoc03,maxLoc04;
    //Point anchor01,anchor02,anchor03,anchor04;
    double minVal;
    double maxVal2;
    //Mat src = imread("C:/answercard/1.jpg",0);//讀入黑白原始圖像
    int srcRows = src.rows;
    int srcCols = src.cols;
    Mat src01 = src(Rect(0,0,srcCols/2,srcRows/2));
    Mat src02 = src(Rect(srcCols/2,0,srcCols/2,srcRows/2));
    Mat src03 = src(Rect(0,srcRows/2,srcCols/2,srcRows/2));
    Mat src04 = src(Rect(srcCols/2,srcRows/2,srcCols/2,srcRows/2));
    //imshow("src01",src01);imshow("src02",src02);imshow("src03",src03);imshow("src04",src04);
    matchTemplate( mattmp, src01, p_w_picpathmatch, 5 );
    normalize( p_w_picpathmatch, p_w_picpathmatch, 0, 1, NORM_MINMAX, -1, Mat() );
    minMaxLoc( p_w_picpathmatch, &minVal, &maxVal2, &minLoc, &maxLoc01, Mat() );
    anchor01 = maxLoc01;
    //circle(src,maxLoc01,3,Scalar(0),3);
    matchTemplate( mattmp, src02, p_w_picpathmatch, 5 );
    normalize( p_w_picpathmatch, p_w_picpathmatch, 0, 1, NORM_MINMAX, -1, Mat() );
    minMaxLoc( p_w_picpathmatch, &minVal, &maxVal2, &minLoc, &maxLoc02, Mat() );
    anchor02 = Point(maxLoc02.x+srcCols/2,maxLoc02.y);
    //circle(src,anchor02,3,Scalar(0),3);
    matchTemplate( mattmp, src03, p_w_picpathmatch, 5 );
    normalize( p_w_picpathmatch, p_w_picpathmatch, 0, 1, NORM_MINMAX, -1, Mat() );
    minMaxLoc( p_w_picpathmatch, &minVal, &maxVal2, &minLoc, &maxLoc03, Mat() );
    anchor03 = Point(maxLoc03.x,maxLoc03.y+srcRows/2);
    //circle(src,anchor03,3,Scalar(0),3);
    matchTemplate( mattmp, src04, p_w_picpathmatch, 5 );
    normalize( p_w_picpathmatch, p_w_picpathmatch, 0, 1, NORM_MINMAX, -1, Mat() );
    minMaxLoc( p_w_picpathmatch, &minVal, &maxVal2, &minLoc, &maxLoc04, Mat() );
    anchor04 = Point(maxLoc04.x+srcCols/2,maxLoc04.y+srcRows/2);
    //circle(src,anchor04,3,Scalar(0),3);

}

答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)獲得的結(jié)果

3)采用warpPerspective進(jìn)行透視變換,如果對(duì)warpPerspective不是很了解可以查看我前面的blog

   Point anchor01,anchor02,anchor03,anchor04;    Point2f src_vertices[4];
    Point2f dst_vertices[4];
    //獲得矯正結(jié)果圖像的參數(shù)
    Mat matstandard = imread("C:/answercard/1.jpg",0);//讀入黑白原始圖像
    Mat mattmp = imread("C:/answercard/temp.jpg",0);
    FetchAnchorPoints(matstandard,mattmp,anchor01,anchor02,anchor03,anchor04);
    std::cout<<"anchor01"<<anchor01<<" "<<"anchor02"<<anchor02<<" "<<"anchor03"<<anchor03<<" "<<"anchor04"<<anchor04;
    dst_vertices[0] = anchor01;
    dst_vertices[1] = anchor02;
    dst_vertices[2] = anchor03;
    dst_vertices[3] = anchor04;
    //dst_vertices.push_back(anchor01);dst_vertices.push_back(anchor02);dst_vertices.push_back(anchor03);dst_vertices.push_back(anchor04);
    //獲得需要矯正圖像參數(shù)
    Mat matsrc = imread("C:/answercard/bigroatate.jpg",0);
    FetchAnchorPoints(matsrc,mattmp,anchor01,anchor02,anchor03,anchor04);
    cout<<"\n";
    std::cout<<"anchor01"<<anchor01<<" "<<"anchor02"<<anchor02<<" "<<"anchor03"<<anchor03<<" "<<"anchor04"<<anchor04;
    src_vertices[0] = anchor01;
    src_vertices[1] = anchor02;
    src_vertices[2] = anchor03;
    src_vertices[3] = anchor04;
    //src_vertices.push_back(anchor01);src_vertices.push_back(anchor02);src_vertices.push_back(anchor03);src_vertices.push_back(anchor04);
    //透視變化
    Mat warpMatrix = getPerspectiveTransform(src_vertices, dst_vertices);
    cv::Mat rotated;
    warpPerspective(matsrc, rotated, warpMatrix, rotated.size(), INTER_LINEAR, BORDER_CONSTANT);
    imshow("rotated",rotated);
    imshow("matstandard",matstandard);這一步得到的校正圖像:答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)4)對(duì)原始圖像進(jìn)行裁剪//對(duì)原始圖像進(jìn)行裁剪
    Mat roi01;Mat roi02;Mat roi03;Mat roi04;    anchor01 =dst_vertices[0] ;
    anchor02 =dst_vertices[1] ;
    anchor03 =dst_vertices[2] ;
    anchor04 =dst_vertices[3] ;
    //TODO這個(gè)地方最終的時(shí)候需要改成rotated
    roi01 = matstandard(Rect(anchor01.x,anchor01.y+mattmp.rows,20,anchor03.y-anchor01.y-mattmp.rows));
    roi02 = matstandard(Rect(anchor01.x+mattmp.cols,anchor01.y,anchor02.x-anchor01.x-mattmp.cols,20));
    roi03 = matstandard(Rect(anchor02.x+8,anchor02.y+mattmp.rows,17,anchor04.y-anchor02.y-mattmp.rows));
    roi04 = matstandard(Rect(anchor03.x+mattmp.cols,anchor03.y+5,anchor04.x-anchor03.x-mattmp.cols,13));
    //roi02 = FetchMaxContour(roi02);
    //imshow("roi01",roi01);
    //imshow("roi02",roi02);
    //imshow("roi03",roi03);
    //imshow("roi04",roi04);答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)這一步得到的結(jié)果 5)獲得區(qū)域的投影。這里的操作其實(shí)就是獲得圖像的波峰,這樣就能進(jìn)行定位。答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)//函數(shù)名稱:FetchMaxContour
//函數(shù)作用: 對(duì)區(qū)域進(jìn)行預(yù)處理,返回大的連續(xù)區(qū)域
//參    數(shù): src [in] 輸入mat
//返    回:投影值
vector<int>  FetchMaxContour(Mat src)
{
    //讀取圖像
    Mat testmat = src.clone();
    Mat testclone = src.clone();
    Mat matcanny;
    //用于尋找輪廓
    Mat threshold_output;
    vector<vector<Point> > contours;
    vector<Vec4i> hierarchy;
    int imax = 0;int maxsize = 0;
    RotatedRect theMinRect;
    RotatedRect theMinEllipse;
    //imshow("原始圖像",testmat);
    //大津法找到敏感區(qū)域
    threshold(testmat,testmat,0,255,cv::THRESH_OTSU);
    //imshow("大津法",testmat);
    //為什么要轉(zhuǎn)換,因?yàn)榘咨怯袛?shù)據(jù)的區(qū)域,輪廓是圍繞白色區(qū)域的
    threshold(testmat,testmat,0,255,THRESH_BINARY_INV);
    imshow("二值",testmat);
    //計(jì)算縱向投影
    vector<int> vcol;itmp = 0;
    for (int i=0;i<testmat.cols;i++)
    {
        for (int j=0;j<testmat.rows;j++)
        {
            if (testmat.at<uchar>(j,i))
            {
                itmp = itmp +1;
            }
        }
        vcol.push_back(itmp);
        itmp = 0;
    }
    ////對(duì)得到的結(jié)果進(jìn)行處理,計(jì)算波峰
    //int isum = 0;//一共多少個(gè)波峰
    vector<int> vrise;
    for (int i=1;i<vcol.size();i++)
    {
        if (vcol[i-1]==0 && vcol[i]>0)
        {
            vrise.push_back(i);
            //isum = isum+1;
        }
    }
    return vrise;
} 6)獲得投影區(qū)域,并且標(biāo)注出來   vector<int> vroi02 = FetchMaxContour(roi02);    vector<Mat> vmat02;
    for (int i=1;i<vroi02.size();i++)
    {
        Mat roi = rotated(Rect(mattmp.cols+anchor01.x+vroi02[i],roi02.rows+38,11,92));
        //imshow("roi",roi);
        vmat02.push_back(roi);
        circle(rotated,Point(mattmp.cols+anchor01.x+vroi02[i],roi02.rows+38),1,Scalar(0),1);
    }
    vector<int> vroi04 = FetchMaxContour(roi04);
    vector<Mat> vmat04;
    for (int i=0;i<vroi04.size();i++)
    {
        Mat roi = rotated(Rect(mattmp.cols+anchor03.x+vroi04[i],153,11,198));
        //imshow("roi",roi);
        //vmat02.push_back(roi);
        circle(rotated,Point(mattmp.rows+anchor03.x+vroi04[i],153),1,Scalar(0),1);
    }
    imshow("rotated",rotated); 答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)找到的結(jié)果用圓點(diǎn)標(biāo)注出來這里下面一排第一個(gè)圓點(diǎn)沒找到,這是原始模板圖像在設(shè)計(jì)的時(shí)候出現(xiàn)的問題,因?yàn)檫@里只是說明原理,我就沒有修改。7)架設(shè)照相機(jī),獲取實(shí)際圖片做到這一步,下面就是要獲得實(shí)際的圖片并進(jìn)行識(shí)別了。我采用的方法是將答題卡用打印機(jī)打印出來,然后用相機(jī)拍攝下來,注意一下光照,效果如下:答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)照片還是比較模糊的,識(shí)別后達(dá)到預(yù)期效果。注意模板識(shí)別之前首先需要把圖片縮放一下,否則效果不會(huì)太好。Mat matsrc = imread("C:/answercard/r4.jpg",0);
    resize(matsrc,matsrc,Size(600,500));
    FetchAnchorPoints(matsrc,mattmp,anchor01,anchor02,anchor03,anchor04);答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)
效果如此。采用2b鉛筆進(jìn)行填卡,效果如下答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)進(jìn)行閾值分析后,效果很差答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)可以發(fā)現(xiàn),采用2b鉛筆,如果采用圖像識(shí)別的方法的話,光照的影響還是非常大的。接著改用黑色鉛筆(鋼筆也可以)答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)則特征明顯8)對(duì)獲取的結(jié)果進(jìn)行計(jì)算。也就是圖片到數(shù)據(jù)的一個(gè)量化的過程。具體來說,就是將這樣的圖像答題卡圖像識(shí)別  需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)量化成為選擇結(jié)果,思路也是非常直接的,就是對(duì)比最右側(cè)的標(biāo)尺值和實(shí)際獲得的值。在編寫具體代碼的時(shí)候,可能還要加上一定的修正,并且要盡可能保證這個(gè)修正是魯棒的。
  vector<int> vroi02 = FetchMaxContour(roi02);
    vector<Mat> vmat02;
    vector<int> vroi03 = FetchMaxContour(roi03,1);
    //減去偏移,這里的偏移量可以從roi03第一個(gè)值得出
    for (int i=0;i<vroi03.size();i++)
    {
        vroi03[i] = vroi03[i]-30;
    }
    int resulttmp = 9;
    cout<<"vroi02"<<endl;
    //這里i = 0的數(shù)據(jù)是無(wú)用數(shù)據(jù)
    for (int i=1;i<vroi02.size();i++)
    {
        Mat roi = rotated(Rect(mattmp.cols+anchor01.x+vroi02[i],roi02.rows+38,11,92));
        //vmat02.push_back(roi);
        vector<int> vtmp = FetchMaxContour(roi,1);
        vtmp[0] = vtmp[0]+4;
        for (int k = 0;k<9;k++)
        {
            if (vtmp[0]>=vroi03[k] && vtmp[0]<vroi03[k+1])
            {
                resulttmp = k;
                break;
            }
         }
        cout<<i<<" is "<<resulttmp<<" | ";
         cout<<endl;resulttmp = 9;
        if (IsDebug)
        {
            char* tmp = new char[100];
            sprintf(tmp,"C:/answercard/vmat02/%d.jpg",i);
            imwrite(tmp,roi);
            circle(rotated,Point(mattmp.cols+anchor01.x+vroi02[i],roi02.rows+38),1,Scalar(0),1);
        }
    } 結(jié)果完全正確:1 is 0 |2 is 1 |3 is 2 |4 is 4 |5 is 3 |6 is 4 |7 is 4 |8 is 5 |9 is 4 |10 is 4 |11 is 5 |12 is 6 |13 is 3 |

四、小結(jié)  答題卡這種東西很早之前就有了,我想在它第一次被提出的時(shí)候,絕對(duì)是創(chuàng)造性的、革命的東西,大大地提高了考試的生產(chǎn)率。但是之前的那種設(shè)備采用的原理比較精密和復(fù)雜,非常依賴設(shè)備,一定程度上限制了傳播和發(fā)展。今天,隨著機(jī)器視覺算法的不斷發(fā)展、移動(dòng)通信設(shè)備的不斷發(fā)展,解決這種問題有了新的思路和新的市場(chǎng)空間。這也從另一個(gè)方向上說明了機(jī)器視覺技術(shù)的廣闊前景。  本文從需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)3個(gè)方面嘗試對(duì)這個(gè)問題進(jìn)行剖析。受制于資源和個(gè)人能力,很多地方解釋的不是很清楚,最終開發(fā)出來的代碼雖然具備了一定的解決問題的能力,但是畢竟不夠魯棒和高效。畢竟機(jī)器視覺的項(xiàng)目是由市場(chǎng)和實(shí)際需求驅(qū)動(dòng)的,如果有好的想法和需求,歡迎交流。  感謝閱讀,希望有所幫助。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞標(biāo)題:答題卡圖像識(shí)別需求分析、市場(chǎng)分析和技術(shù)實(shí)現(xiàn)-創(chuàng)新互聯(lián)
本文URL:http://muchs.cn/article44/dcjshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、商城網(wǎng)站、App開發(fā)、網(wǎng)站排名、外貿(mào)網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)