private void AnswerKeyMaker_Load(object sender, EventArgs e) { Application.DoEvents(); SheetSelector ssf = new SheetSelector(XMLFileName); ssf.StartPosition = FormStartPosition.CenterParent; ssf.ShowDialog(this); if (ssf.Selected == "") { Close(); } else { for (int i = 1; i < 1000; i++) { if (i.ToString() != ((OMREnums.OMRSheet)i).ToString()) { try { OMRSheetReader.GetSheetPropertyLocation(XMLFileName, (OMREnums.OMRSheet)i, OMREnums.OMRProperty.SheetSize); if (((OMREnums.OMRSheet)i).ToString() == ssf.Selected) { workingSheet = (OMREnums.OMRSheet)i; } } catch { } } } populate(); } }
public void action(string teacher, string student, string imagePath) { /// Get scan image and resize it scannedImage = System.Drawing.Image.FromFile(imagePath); scannedImage = (System.Drawing.Image)ImageUtilities.ResizeImage((Bitmap)scannedImage, 2100, 2100 * scannedImage.Height / scannedImage.Width); Bitmap unf = new Bitmap(scannedImage); OpticalReader reader = new OpticalReader(); scannedImage = (System.Drawing.Image)reader.ExtractOMRSheet(unf, "sheets.xml", OMREnums.OMRSheet.A550); /// Get user selected options Rectangle[] Blocks = new Rectangle[] { OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock1), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock2), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock3), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock4) }; List <Bitmap[]> bmps = new List <Bitmap[]>(); for (int i = 0; i < 4; i++) { bmps.Add(SliceOMarkBlock(scannedImage, Blocks[i], 10)); } string ans = ""; foreach (Bitmap[] blk in bmps) { foreach (Bitmap line in blk) { ans += rateSlice(line, 5) + ","; } } Console.WriteLine(ans); /// Get exam ID OpticalReader rr = new OpticalReader(); int examId = Convert.ToInt32(rr.getRegNumOfSheet(scannedImage, OMREnums.OMRSheet.A550, "sheets.xml", false).ToString()); Console.WriteLine(examId); Console.Read(); /// Return to Java application string jarPath = "E-Marker.jar"; string argumentsFortheJarFile = "\"" + teacher + "\" \"" + student + "\" " + examId + " " + ans; System.Diagnostics.Process clientProcess = new Process(); clientProcess.StartInfo.FileName = "java"; clientProcess.StartInfo.Arguments = @"-jar " + jarPath + " " + argumentsFortheJarFile; clientProcess.Start(); clientProcess.WaitForExit(); }
private void radButton1_Click(object sender, EventArgs e) { panel1.Invalidate(); Application.DoEvents(); Rectangle[] Blocks = new Rectangle[] { OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock1), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock2), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock3), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock4) }; List <Bitmap[]> bmps = new List <Bitmap[]>(); for (int i = 0; i < 4; i++) { bmps.Add(rr.SliceOMarkBlock(panel1.BackgroundImage, Blocks[i], 10)); } DataSet dsMarks = DB_Connect.ExecuteQuery("SELECT a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40 FROM mcq_marking_scheme_tab WHERE marking_scheme_id = '" + markingSchemeId + "';"); int[] ans_arr; ans_arr = new int[40]; string img_path = txtFileName.Text.ToString(); int cnt = 0; int result = 0; foreach (Bitmap[] blk in bmps) { foreach (Bitmap line in blk) { ans_arr[cnt] = rr.rateSlice(line, 5); if (ans_arr[cnt] == int.Parse(dsMarks.Tables[0].Rows[0][cnt].ToString())) { result++; } cnt++; } } DB_Connect.InsertQuery("INSERT INTO mcq_answers_tab(candidate_id,exam_id,answersheet_path,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,a40,total_mark) VALUES('" + candidateId + "','" + examId + "','" + img_path + "', " + ans_arr[0] + ", " + ans_arr[1] + ", " + ans_arr[2] + ", " + ans_arr[3] + "," + ans_arr[4] + "," + ans_arr[5] + "," + ans_arr[6] + "," + ans_arr[7] + "," + ans_arr[8] + "," + ans_arr[9] + "," + ans_arr[10] + "," + ans_arr[11] + "," + ans_arr[12] + "," + ans_arr[13] + "," + ans_arr[14] + "," + ans_arr[15] + "," + ans_arr[16] + "," + ans_arr[17] + "," + ans_arr[18] + "," + ans_arr[19] + "," + ans_arr[20] + ", " + ans_arr[21] + "," + ans_arr[22] + "," + ans_arr[23] + "," + ans_arr[24] + "," + ans_arr[25] + "," + ans_arr[26] + "," + ans_arr[27] + "," + ans_arr[28] + "," + ans_arr[29] + "," + ans_arr[30] + "," + ans_arr[31] + "," + ans_arr[32] + "," + ans_arr[33] + "," + ans_arr[34] + "," + ans_arr[35] + "," + ans_arr[36] + "," + ans_arr[37] + "," + ans_arr[38] + "," + ans_arr[39] + "," + result + ");"); lblResult.Text = result.ToString(); }
private void button2_Click(object sender, EventArgs e) { if (listBox1.Items.Count < OMRSheetReader.GetSheetPropertyInt( XMLFileName, workingSheet, OMREnums.OMRProperty.NumOfBlocks) * (OMRSheetReader.GetSheetPropertyBool(XMLFileName, workingSheet, OMREnums.OMRProperty.TensBlock) ? 10 : 20)) { listBox1.Items.Add("Q# " + (listBox1.Items.Count + 1)); answerkey.Add(1); listBox1.SelectedIndex = listBox1.Items.Count - 1; } else { MessageBox.Show(workingSheet.ToString() + " does not support more than " + listBox1.Items.Count + " answers"); } }
public SheetSelector(string xmlFile) { InitializeComponent(); for (int i = 1; i < 1000; i++) { if (i.ToString() != ((OMREnums.OMRSheet)i).ToString()) { try { OMRSheetReader.GetSheetPropertyLocation(xmlFile, (OMREnums.OMRSheet)i, OMREnums.OMRProperty.SheetSize); listBox1.Items.Add(((OMREnums.OMRSheet)i).ToString()); } catch { } } } }
private void button7_Click(object sender, EventArgs e) { //ContrastCorrection cc = new ContrastCorrection(); //panel1.BackgroundImage = cc.Apply((Bitmap)panel1.BackgroundImage); panel1.Invalidate(); Application.DoEvents(); showTimeStamp("Slicing Started"); Rectangle[] Blocks = new Rectangle[] { OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock1), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock2), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock3), OMRSheetReader.GetSheetPropertyLocation("sheets", OMREnums.OMRSheet.A550, OMREnums.OMRProperty.tensBlock4) }; List <Bitmap[]> bmps = new List <Bitmap[]>(); for (int i = 0; i < 4; i++) { bmps.Add(SliceOMarkBlock(panel1.BackgroundImage, Blocks[i], 10)); } showTimeStamp("Slicing ended"); string ans = ""; foreach (Bitmap[] blk in bmps) { foreach (Bitmap line in blk) { ans += rateSlice(line, 5) + ","; } ans += "\r\n"; } panel1.Invalidate(); Application.DoEvents(); MessageBox.Show(ans); }
private Bitmap ExtractPaperFromFlattened(Bitmap bitmap, Bitmap basicImage, int minBlobWidHei, int fillint, int contint, string OMRSheets) { BitmapData bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); // lock image // step 2 - locating objects BlobCounter blobCounter = new BlobCounter(); blobCounter.FilterBlobs = true; blobCounter.MinHeight = minBlobWidHei; blobCounter.MinWidth = minBlobWidHei; blobCounter.ProcessImage(bitmapData); Blob[] blobs = blobCounter.GetObjectsInformation(); bitmap.UnlockBits(bitmapData); Graphics g = Graphics.FromImage(bitmap); Pen yellowPen = new Pen(Color.Yellow, 2); // circles Pen redPen = new Pen(Color.Red, 2); // quadrilateral Pen brownPen = new Pen(Color.Brown, 2); // quadrilateral with known sub-type Pen greenPen = new Pen(Color.Green, 2); // known triangle Pen bluePen = new Pen(Color.Blue, 2); // triangle Rectangle[] rects = blobCounter.GetObjectsRectangles(); Blob[] blobs2 = blobCounter.GetObjects(bitmap, false); System.Drawing.Image compImg = System.Drawing.Image.FromFile("lc.jpg"); UnmanagedImage compUMImg = UnmanagedImage.FromManagedImage((Bitmap)compImg); List <IntPoint> quad = new List <IntPoint>(); try { //g.DrawRectangles(yellowPen, rects); foreach (Blob blob in blobs2) { if ( ((double)blob.Area) / ((double)bitmap.Width * bitmap.Height) > 0.0001 && ((double)blob.Area) / ((double)bitmap.Width * bitmap.Height) < 0.005 && blob.Rectangle.X < (bitmap.Width) / 4) { if ((double)blob.Rectangle.Width / blob.Rectangle.Height < 1.4 && (double)blob.Rectangle.Width / blob.Rectangle.Height > .6) { compUMImg = UnmanagedImage.FromManagedImage(ImageUtilities.ResizeImage(compImg, blob.Rectangle.Width, blob.Rectangle.Height)); if (isSame(blob.Image, compUMImg)) { g.DrawRectangle(yellowPen, blob.Rectangle); quad.Add(new IntPoint((int)blob.CenterOfGravity.X, (int)blob.CenterOfGravity.Y)); } } } } } catch (ArgumentException) { MessageBox.Show("No Blobs"); } try { if (quad[0].Y > quad[1].Y) { IntPoint tp = quad[0]; quad[0] = quad[1]; quad[1] = tp; } } catch { } compImg = System.Drawing.Image.FromFile("rc.jpg"); compUMImg = UnmanagedImage.FromManagedImage((Bitmap)compImg); try { //g.DrawRectangles(yellowPen, rects); foreach (Blob blob in blobs2) { if ( ((double)blob.Area) / ((double)bitmap.Width * bitmap.Height) > 0.0001 && ((double)blob.Area) / ((double)bitmap.Width * bitmap.Height) < 0.004 && blob.Rectangle.X > (bitmap.Width * 3) / 4) { if ((double)blob.Rectangle.Width / blob.Rectangle.Height < 1.4 && (double)blob.Rectangle.Width / blob.Rectangle.Height > .6) { compUMImg = UnmanagedImage.FromManagedImage(ImageUtilities.ResizeImage(compImg, blob.Rectangle.Width, blob.Rectangle.Height)); if (isSame(blob.Image, compUMImg)) { g.DrawRectangle(yellowPen, blob.Rectangle); quad.Add(new IntPoint((int)blob.CenterOfGravity.X, (int)blob.CenterOfGravity.Y)); } } } } } catch (ArgumentException) { MessageBox.Show("No Blobs"); } try { if (quad[2].Y < quad[3].Y) { IntPoint tp = quad[2]; quad[2] = quad[3]; quad[3] = tp; } } catch { } yellowPen.Dispose(); redPen.Dispose(); greenPen.Dispose(); bluePen.Dispose(); brownPen.Dispose(); g.Dispose(); //// put new image to clipboard //Clipboard.SetDataObject(bitmap); // and to picture box if (quad.Count == 4) { if (((double)quad[1].Y - (double)quad[0].Y) / ((double)quad[2].Y - (double)quad[3].Y) < .75 || ((double)quad[1].Y - (double)quad[0].Y) / ((double)quad[2].Y - (double)quad[3].Y) > 1.25) { quad.Clear(); } else if (quad[0].X > bitmap.Width / 2 || quad[1].X > bitmap.Width / 2 || quad[2].X < bitmap.Width / 2 || quad[3].X < bitmap.Width / 2) { quad.Clear(); } } if (quad.Count != 4) { if (contint <= 60) { if (contint >= 0) { contint += 5; contint *= -1; return(ExtractOMRSheet(basicImage, fillint, contint, OMRSheets)); } else { contint *= -1; contint += 10; return(ExtractOMRSheet(basicImage, fillint, contint, OMRSheets)); } } else { MessageBox.Show("Extraction Failed."); return(basicImage); } } else { IntPoint tp2 = quad[3]; quad[3] = quad[1]; quad[1] = tp2; QuadrilateralTransformation wrap = new QuadrilateralTransformation(quad); wrap.UseInterpolation = false; Rectangle sr = OMRSheetReader.GetSheetPropertyLocation(OMRSheets, OMREnums.OMRSheet.A550, OMREnums.OMRProperty.SheetSize); wrap.AutomaticSizeCalculaton = false; wrap.NewWidth = sr.Width; wrap.NewHeight = sr.Height; wrap.Apply(basicImage).Save("LastImg.jpg", ImageFormat.Jpeg); System.Drawing.Image imgl = (System.Drawing.Image)wrap.Apply(basicImage); Graphics gg = Graphics.FromImage(imgl); Pen pr = new Pen(Brushes.Red, 2); //gg.DrawRectangle(pr, MyXML.OMRSheetReader.GetSheetProperty(OMRSheets, MyXML.OMREnums.OMRSheet.A550, MyXML.OMREnums.OMRProperty.tensBlock1)); //gg.DrawRectangle(pr, MyXML.OMRSheetReader.GetSheetProperty(OMRSheets, MyXML.OMREnums.OMRSheet.A550, MyXML.OMREnums.OMRProperty.tensBlock2)); //gg.DrawRectangle(pr, MyXML.OMRSheetReader.GetSheetProperty(OMRSheets, MyXML.OMREnums.OMRSheet.A550, MyXML.OMREnums.OMRProperty.tensBlock3)); //gg.DrawRectangle(pr, MyXML.OMRSheetReader.GetSheetProperty(OMRSheets, MyXML.OMREnums.OMRSheet.A550, MyXML.OMREnums.OMRProperty.tensBlock4)); pr.Dispose(); gg.Dispose(); return((Bitmap)imgl); } }