Please enable JavaScript.
Coggle requires JavaScript to display documents.
类Censor (private (成员变量 (3通道图,用于先阅后扫 PageImageVec m_RGBImages;, 单通道图…
类Censor
private
成员函数
bool check_one_page(ExamPage& one_page, cv::Mat& page_image);
bool check_page_size(ExamPage& one_page, cv::Mat& page_image);
bool check_abpaper_rect(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_four_anchors(ExamPage& one_page, cv::Mat& page_image);
bool check_top_anchors(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool locate_top_anchors(TopPositionAnchors& top_anchors, cv::Mat& pageimage, cv::Rect<double>& top_anchor_area);
bool check_left_anchors(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool locate_left_anchors(LeftPositionAnchors& left_anchors, cv::Mat& page_image, cv::Rect& left_anchor_area);
bool check_omr_school_number(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool locate_omr_school_blocks(ExamPage& one_page, cv::Mat& page_image);
-
bool check_barcode_school_number(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_optional_subjectives(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_absent_rects(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
通过前一个块的调整误差来调整后一个块
void update_one_question(cv::Mat& page_image, std::vector<OmrRect>& blocks, int expand_space, double& x_error, double& y_error);
bool construct_rect(ExamPage& one_page, cv::Point& grid, OmrRect& cons);
根据二维index和顶部与左部的定位块来组合出选项块的实际坐标
bool construct_rect(ExamPage& one_page, int col_index, int rowindex, cv::Rect<double>& cons);
std::vector<cv::Rect> detect_blocks(cv::Mat &image, cv::Rect roi, int refW = 0, int refH = 0);
void detect_blocks(cv::Mat &image, cv::Rect roi, std::vector<cv::Rect>& blocks);
void split_to_rows(std::vector<OmrObjectives>& objectives, std::vector<std::vector<OmrObjectives*>>& rows);
void split_to_rows(std::vector<OmrObjectives>& objectives, std::vector<std::vector<std::shared_ptr<OmrObjectives> >>& rows);
根据左部和顶部的定位块来组合处实际的坐标
void construct_one_question_rects(ExamPage& one_page, std::vector<OmrRect>& blocks, std::vector<OmrPoint>& grids);
bool check_page_numbers(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
-
根据不同的答题卡创建不同的主观题分数识别器
std::shared_ptr<SubjectiveQuestionScoreRecognizer> MakeSubjectiveScoreCalculator(SubjectiveScoreBar& scorebar);
可视化一份试卷所有的识别结果
void visualization(ExamPage& one_page, cv::Mat& page_image, std::string save_name);
bool check_page_barcode(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_title_rects(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_omr_objective_groups(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_subjective_scores(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
bool check_judge_scores(ExamPage& one_page, cv::Mat& page_image, Transformer& transformer);
根据不同的答题卡创建不同的主观题打分块定位器
std::shared_ptr<ScoreBlockLocator> MakeScoreBlockLocator(SubjectiveScoreBar& scorebar);
void GatherScoreArea(std::vector<ScoreArea>& scoreAreas, ScoreArea& area);
填空题打分识别void recognize_mark_of_judge_score_blocks(cv::Mat& rgb_page_image, JudgeScoreBlocks& scorebar, int pageIndx);
主观题打分识别void recognize_mark_of_subjectives(cv::Mat& rgb_page_image, SubjectiveScoreBar& scorebar, int pageIndex);
填空题给分块的定位void adjust_judge_score_blocks(cv::Mat& page_image, JudgeScoreBlocks& scoreBlocks);
主观题给分块的定位void adjust_subjective_scorebar(cv::Mat& page_image, SubjectiveScoreBar& scorebar);
void adjust_objective_position_in_group(cv::Mat& page_image, OmrObjectivesGroup& group);
bool locate_objective_anchors(cv::Mat& page_image, OmrObjectivesGroup& group);
获取一组填涂块的关键信息,如块间距,尺寸,排列方向等
bool analyse_one_question_rects(std::vector<OmrRect>& blocks, double& row_gap, double& col_gap, double& block_w, double& block_h, int& dir);
可视化一份试卷所有的填涂识别结果
void visualization2(ExamPage& one_page, cv::Mat& page_image, std::string save_name);
定位一个选做题的块位置
void check_one_optional_subjective(cv::Mat& page_image, OptionalSubjectives& optionalSbj);
int checkresult(std::vector<cv::Rect<double> > ideals, std::vector<cv::Rect> actuals);
bool samerect(cv::Rect<double>& ideal, cv::Rect& actual, int x_err = 15, int y_err = 15, int w_err = 8, int h_err = 8);
bool update_rect(cv::Mat& pageimage, cv::Rect<double>& ideal, int expand_space = 6);
-
-
public
成员函数
-
-
bool LoadPageImage(cv::Mat& image, int pageIndex, std::string imgPath);
-
-
-
-
-
-
void GetFourAnchorWidthAndHeight(int &w, int&h);
-
-
bool GetImage(int pageIndex, cv::Mat& image);
-
void SetOptionQuestionsResult(int pageIndex, std::vector<std::vector<int>>& result);
-
void SetObjectiveQuestionsResult(int pageIndex, int groupIndex, std::vector<std::vector<int>>& result);
void SetObjectiveQuestionsBlocks(int pageIndex, std::vector<std::vector<cv::Rect>>& blocks);
void SetObjectiveQuestionsResult(int pageIndex, std::vector<std::vector<int>>& result);
-
void SetOptionQuestionsBlocks(int pageIndex, std::vector<std::vector<cv::Rect>>& blocks);
void SetOptionQuestionsResult(int pageIndex, std::vector<std::string>& results);
-
-
-
-
void SetSchoolNumberBarcodeMSG(int pageIndex, std::string& msg);
-
void GetSchoolNumberBlocks(int pageIndex, std::vector<std::vector<cv::Rect>>& tmplCoord, std::vector<std::vector<cv::Rect>>& studentCoord);
void SetSchoolNumberBlocks(int pageIndex, std::vector<std::vector<cv::Rect>>& blocks);
void SetSchoolNumberResult(int pageIndex, std::vector<std::vector<int>>& result);
void SetAbsentResult(int pageIndex, int result);
-
void SetABPaperResult(int pageIndex, std::vector<int>& result);
-
-
bool RecognizePageBarcode(PageBarcode& page_barcode, cv::Mat& page_image, std::string& examid, int& page_num);
条码和二维码识别,通过lib来指定先用哪个库,0表示zxing,1表示zbar
std::string RecognizeQRCode(cv::Mat& barcodeImage, cv::Rect& pos = cv::Rect(0,0,0,0), int lib = 0);
-
-
bool GetObjectiveQuestions(int pageIndex, int groupIndex, std::vector<std::vector<cv::Rect>>& tmplCoord, std::vector<std::vector<cv::Rect>>& studentCoord);
-
bool SetObjectiveQuestions(int pageIndex, int groupIndex, std::vector<std::vector<cv::Rect>>& studentCoord);
-
获取文字定位点 bool GetTitleArea(int pageIndex, cv::Rect& area);
-
获取主观题的打分区域 bool GetScorebarImage(std::string& tihaoStr, cv::Mat& scoreImage);
-
命名空间censor下
class ScoreArea
-
-
-
-
ScoreArea(std::string& tihao, cv::Rect& area, int pageIndex) : m_tihao(tihao), m_area(area), m_pageIndex(pageIndex){}
-