수정
This commit is contained in:
22
ScanToTextProgram/MainForm.Designer.cs
generated
22
ScanToTextProgram/MainForm.Designer.cs
generated
@@ -31,6 +31,7 @@
|
||||
this.simpleButton_SetScanPoin = new DevExpress.XtraEditors.SimpleButton();
|
||||
this.treeList1 = new DevExpress.XtraTreeList.TreeList();
|
||||
this.simpleButton_ScanToOcr = new DevExpress.XtraEditors.SimpleButton();
|
||||
this.simpleButton_KeyHookStart = new DevExpress.XtraEditors.SimpleButton();
|
||||
((System.ComponentModel.ISupportInitialize)(this.treeList1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
@@ -47,6 +48,14 @@
|
||||
//
|
||||
this.treeList1.Location = new System.Drawing.Point(140, 12);
|
||||
this.treeList1.Name = "treeList1";
|
||||
this.treeList1.OptionsBehavior.ReadOnly = true;
|
||||
this.treeList1.OptionsClipboard.AllowCopy = DevExpress.Utils.DefaultBoolean.True;
|
||||
this.treeList1.OptionsClipboard.AllowExcelFormat = DevExpress.Utils.DefaultBoolean.True;
|
||||
this.treeList1.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.False;
|
||||
this.treeList1.OptionsScrollAnnotations.ShowSelectedRows = DevExpress.Utils.DefaultBoolean.True;
|
||||
this.treeList1.OptionsView.ShowColumns = false;
|
||||
this.treeList1.OptionsView.ShowIndicator = false;
|
||||
this.treeList1.OptionsView.ShowRoot = false;
|
||||
this.treeList1.Size = new System.Drawing.Size(577, 375);
|
||||
this.treeList1.TabIndex = 1;
|
||||
//
|
||||
@@ -59,16 +68,28 @@
|
||||
this.simpleButton_ScanToOcr.Text = "스캔영역설정";
|
||||
this.simpleButton_ScanToOcr.Click += new System.EventHandler(this.simpleButton_SetScanPoin_Click);
|
||||
//
|
||||
// simpleButton_KeyHookStart
|
||||
//
|
||||
this.simpleButton_KeyHookStart.Location = new System.Drawing.Point(12, 163);
|
||||
this.simpleButton_KeyHookStart.Name = "simpleButton_KeyHookStart";
|
||||
this.simpleButton_KeyHookStart.Size = new System.Drawing.Size(104, 85);
|
||||
this.simpleButton_KeyHookStart.TabIndex = 2;
|
||||
this.simpleButton_KeyHookStart.Text = "Key Hook Start";
|
||||
this.simpleButton_KeyHookStart.Click += new System.EventHandler(this.simpleButton_KeyHookStart_Click);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(729, 399);
|
||||
this.Controls.Add(this.simpleButton_KeyHookStart);
|
||||
this.Controls.Add(this.treeList1);
|
||||
this.Controls.Add(this.simpleButton_ScanToOcr);
|
||||
this.Controls.Add(this.simpleButton_SetScanPoin);
|
||||
this.Name = "MainForm";
|
||||
this.Text = "Scan To Text";
|
||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
|
||||
this.Load += new System.EventHandler(this.MainForm_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.treeList1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
|
||||
@@ -79,6 +100,7 @@
|
||||
private DevExpress.XtraEditors.SimpleButton simpleButton_SetScanPoin;
|
||||
private DevExpress.XtraTreeList.TreeList treeList1;
|
||||
private DevExpress.XtraEditors.SimpleButton simpleButton_ScanToOcr;
|
||||
private DevExpress.XtraEditors.SimpleButton simpleButton_KeyHookStart;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,44 @@
|
||||
using DevExpress.Utils.Extensions;
|
||||
using DevExpress.XtraPrinting.Native;
|
||||
using DevExpress.XtraWaitForm;
|
||||
using ScanToTextProgram.OCR;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Reflection.Emit;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ScanToTextProgram
|
||||
{
|
||||
public partial class MainForm : Form
|
||||
{
|
||||
DataTable dataTable = null;
|
||||
|
||||
Rectangle rectangle = new Rectangle();
|
||||
|
||||
OcrProcessor ocrProcessor = new OcrProcessor();
|
||||
|
||||
public MainForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
Rectangle rectangle = new Rectangle();
|
||||
dataTable = new DataTable();
|
||||
dataTable.Columns.Add("시가");
|
||||
dataTable.Columns.Add("고가");
|
||||
dataTable.Columns.Add("저가");
|
||||
dataTable.Columns.Add("종가");
|
||||
dataTable.Columns.Add("구름(상)");
|
||||
dataTable.Columns.Add("구름(하)");
|
||||
dataTable.Columns.Add("40_1(상)");
|
||||
dataTable.Columns.Add("40_1(하)");
|
||||
dataTable.Columns.Add("40_2(상)");
|
||||
dataTable.Columns.Add("40_2(하)");
|
||||
|
||||
treeList1.DataSource = dataTable;
|
||||
}
|
||||
|
||||
// 스캔 영역 설정
|
||||
private void simpleButton_SetScanPoin_Click(object sender, EventArgs e)
|
||||
@@ -28,18 +47,22 @@ namespace ScanToTextProgram
|
||||
rectangle = screenCapture.SelectArea();
|
||||
}
|
||||
|
||||
// 스캔 버튼 클릭
|
||||
private void simpleButton_SetScanPoin_Click_1(object sender, EventArgs e)
|
||||
{
|
||||
scanToOcr();
|
||||
}
|
||||
|
||||
// 설정된 영역에 따라 스캔하고 OCR 변경하기
|
||||
public void scanToOcr()
|
||||
{
|
||||
var screenCapture = new ScreenCapture();
|
||||
var selectedArea = rectangle;
|
||||
var screenshot = screenCapture.CaptureScreen(selectedArea);
|
||||
|
||||
var ocrProcessor = new OcrProcessor();
|
||||
string extractedText = ocrProcessor.ExtractTextFromImage(screenshot);
|
||||
|
||||
MessageBox.Show(extractedText);
|
||||
|
||||
var splitLine = extractedText.Split('\n');
|
||||
var splitLine = extractedText.Split('\n').ToList();
|
||||
|
||||
var 시가 = 0.0;
|
||||
var 고가 = 0.0;
|
||||
@@ -52,31 +75,56 @@ namespace ScanToTextProgram
|
||||
var _40_2_상 = 0.0;
|
||||
var _40_2_하 = 0.0;
|
||||
|
||||
for (var i=0; i < splitLine.Length; i++)
|
||||
for (var i = 0; i < splitLine.Count(); i++)
|
||||
{
|
||||
if(string.IsNullOrEmpty(splitLine[i])) continue;
|
||||
var str1 = splitLine[i].Trim();
|
||||
|
||||
if (string.IsNullOrEmpty(str1)) splitLine.Remove(splitLine[i]);
|
||||
}
|
||||
|
||||
for (var i = 0; i < splitLine.Count(); i++)
|
||||
{
|
||||
if (string.IsNullOrEmpty(splitLine[i])) continue;
|
||||
|
||||
var line = splitLine[i];
|
||||
|
||||
var test = "BTCUSDT - 1h 097,743.2 H97,824.3 L97,353.0 C97,669.6 -73.6 (~0.08%)";
|
||||
|
||||
// 시가, 고가, 저가, 종가
|
||||
if(i==0)
|
||||
if (i == 0)
|
||||
{
|
||||
var 시고저종s = line.Split(' ');
|
||||
시가 = Convert.ToDouble(시고저종s[4].Remove(0, 1));
|
||||
고가 = Convert.ToDouble(시고저종s[5].Remove(0, 1));
|
||||
저가 = Convert.ToDouble(시고저종s[6].Remove(0, 1));
|
||||
종가 = Convert.ToDouble(시고저종s[7].Remove(0, 1));
|
||||
|
||||
var cnt = 시고저종s.Count() - 1;
|
||||
|
||||
var str_시가 = 시고저종s[cnt - 5].Remove(0, 1);
|
||||
var str_고가 = 시고저종s[cnt - 4];
|
||||
var str_저가 = 시고저종s[cnt - 3].Remove(0, 1);
|
||||
var str_종가 = 시고저종s[cnt - 2];
|
||||
|
||||
if (!str_시가.Contains('.')) str_시가 = str_시가.Insert(str_시가.Length - 1, ".");
|
||||
if (!str_고가.Contains('.')) str_고가 = str_고가.Insert(str_고가.Length - 1, ".");
|
||||
if (!str_저가.Contains('.')) str_저가 = str_저가.Insert(str_저가.Length - 1, ".");
|
||||
if (!str_종가.Contains('.')) str_종가 = str_종가.Insert(str_종가.Length - 1, ".");
|
||||
|
||||
시가 = Convert.ToDouble(str_시가);
|
||||
고가 = Convert.ToDouble(str_고가);
|
||||
저가 = Convert.ToDouble(str_저가);
|
||||
종가 = Convert.ToDouble(str_종가);
|
||||
}
|
||||
// 구름떼
|
||||
else if(i == 1)
|
||||
else if (i == 1)
|
||||
{
|
||||
var 구름떼s = line.Split(' ');
|
||||
var data1 = Convert.ToDouble(구름떼s[3]);
|
||||
var data2 = Convert.ToDouble(구름떼s[4]);
|
||||
|
||||
if(data1 > data2)
|
||||
var str_data1 = 구름떼s[구름떼s.Count() - 1];
|
||||
var str_data2 = 구름떼s[구름떼s.Count() - 2];
|
||||
|
||||
if (!str_data1.Contains('.')) str_data1 = str_data1.Insert(str_data1.Length - 1, ".");
|
||||
if (!str_data2.Contains('.')) str_data2 = str_data2.Insert(str_data2.Length - 1, ".");
|
||||
|
||||
var data1 = Convert.ToDouble(str_data1);
|
||||
var data2 = Convert.ToDouble(str_data2);
|
||||
|
||||
if (data1 > data2)
|
||||
{
|
||||
구름_상 = data1;
|
||||
구름_하 = data2;
|
||||
@@ -87,22 +135,76 @@ namespace ScanToTextProgram
|
||||
구름_하 = data1;
|
||||
}
|
||||
}
|
||||
//else if(i == )
|
||||
else if (i == 2)
|
||||
{
|
||||
var 볼린저_40_2s = line.Split(' ');
|
||||
|
||||
var str_40_2_상 = 볼린저_40_2s[볼린저_40_2s.Count() - 2];
|
||||
var str_40_2_하 = 볼린저_40_2s[볼린저_40_2s.Count() - 1];
|
||||
|
||||
if (!str_40_2_상.Contains('.')) str_40_2_상 =str_40_2_상.Insert(str_40_2_상.Length - 1, ".");
|
||||
if (!str_40_2_하.Contains('.')) str_40_2_하 = str_40_2_하.Insert(str_40_2_하.Length - 1, ".");
|
||||
|
||||
_40_2_상 = Convert.ToDouble(str_40_2_상);
|
||||
_40_2_하 = Convert.ToDouble(str_40_2_하);
|
||||
}
|
||||
else if (i == 3)
|
||||
{
|
||||
var 볼린저_40_1s = line.Split(' ');
|
||||
|
||||
var str_40_1_상 = 볼린저_40_1s[볼린저_40_1s.Count() - 2];
|
||||
var str_40_1_하 = 볼린저_40_1s[볼린저_40_1s.Count() - 1];
|
||||
|
||||
if (!str_40_1_상.Contains('.')) str_40_1_상 = str_40_1_상.Insert(str_40_1_상.Length - 1, ".");
|
||||
if (!str_40_1_하.Contains('.')) str_40_1_하 = str_40_1_하.Insert(str_40_1_하.Length - 1, ".");
|
||||
|
||||
_40_1_상 = Convert.ToDouble(str_40_1_상);
|
||||
_40_1_하 = Convert.ToDouble(str_40_1_하);
|
||||
}
|
||||
else if (i == 4)
|
||||
{
|
||||
|
||||
}
|
||||
else if (i == 5)
|
||||
{
|
||||
|
||||
}
|
||||
else if (i == 6)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dataTable.Rows.Clear();
|
||||
var row = dataTable.Rows.Add();
|
||||
row["시가"] = Convert.ToDouble(시가);
|
||||
row["고가"] = Convert.ToDouble(고가);
|
||||
row["저가"] = Convert.ToDouble(저가);
|
||||
row["종가"] = Convert.ToDouble(종가);
|
||||
row["구름(상)"] = Convert.ToDouble(구름_상);
|
||||
row["구름(하)"] = Convert.ToDouble(구름_하);
|
||||
row["40_1(상)"] = Convert.ToDouble(_40_1_상);
|
||||
row["40_1(하)"] = Convert.ToDouble(_40_1_하);
|
||||
row["40_2(상)"] = Convert.ToDouble(_40_2_상);
|
||||
row["40_2(하)"] = Convert.ToDouble(_40_2_하);
|
||||
|
||||
treeList1.DataSource = dataTable;
|
||||
treeList1.RefreshDataSource();
|
||||
}
|
||||
|
||||
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
HookHandler.Unhook();
|
||||
}
|
||||
|
||||
private void MainForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
DataTable dataTable = new DataTable();
|
||||
dataTable.Columns.Add("시가");
|
||||
dataTable.Columns.Add("고가");
|
||||
dataTable.Columns.Add("저가");
|
||||
dataTable.Columns.Add("종가");
|
||||
dataTable.Columns.Add("구름(상)");
|
||||
dataTable.Columns.Add("구름(하)");
|
||||
dataTable.Columns.Add("40_1(상)");
|
||||
dataTable.Columns.Add("40_1(하)");
|
||||
dataTable.Columns.Add("40_2(상)");
|
||||
dataTable.Columns.Add("40_2(하)");
|
||||
private void simpleButton_KeyHookStart_Click(object sender, EventArgs e)
|
||||
{
|
||||
HookHandler.SetHook(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,23 +8,29 @@ using Tesseract;
|
||||
|
||||
namespace ScanToTextProgram.OCR
|
||||
{
|
||||
internal class OcrProcessor
|
||||
public class OcrProcessor
|
||||
{
|
||||
public string ExtractTextFromImage(Bitmap image)
|
||||
public string ocrPath = "D:\\tessdata-4.1.0";
|
||||
|
||||
TesseractEngine tesseractEngine;
|
||||
|
||||
public OcrProcessor()
|
||||
{
|
||||
// Tesseract OCR 초기화
|
||||
tesseractEngine = new TesseractEngine(ocrPath, "eng", EngineMode.Default);
|
||||
}
|
||||
|
||||
string ocrPath = "D:\\Download\\tessdata-4.1.0";
|
||||
|
||||
using (var engine = new TesseractEngine(ocrPath, "eng", EngineMode.Default))
|
||||
public string ExtractTextFromImage(Bitmap image)
|
||||
{
|
||||
// 이미지를 텍스트로 변환
|
||||
using (var pix = PixConverter.ToPix(image))
|
||||
{
|
||||
var result = engine.Process(pix);
|
||||
var pix = PixConverter.ToPix(image);
|
||||
tesseractEngine = new TesseractEngine(ocrPath, "eng", EngineMode.Default);
|
||||
// 숫자와 점(.)만 인식하도록 설정
|
||||
tesseractEngine.SetVariable("tessedit_char_whitelist", "0123456789., \n");
|
||||
|
||||
var result = tesseractEngine.Process(pix);
|
||||
return result.GetText();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="HookHandler.cs" />
|
||||
<Compile Include="ScreenCapture.cs" />
|
||||
<Compile Include="MainForm.cs">
|
||||
<SubType>Form</SubType>
|
||||
|
||||
Reference in New Issue
Block a user