Monday 12 October 2015

VB :: Optical Character Recognition (OCR) Untuk Pembacaan kWh PLN Menggunakan VB dan EmguCV


Untuk proses pertama saya akan memperkenalkan apa itu OCR.
Optical Character Recognition adalah teknologi yang dapat mengekstrak teks dari sebuah gambar dengan cara men-scan dokumen sehingga bisa diedit, diformat, dicari, diindeks, atau diterjemahkan secara otomatis. Saya mengambil contoh kasus disini pada penggunaan kWh meter PLN, yang bertujuan dengan sistem tersebut data hasil pemotretan meteran listrik. dapat dengan cepat dibaca dan dihasilkan nomor meteran kWh listrik dan nomor pelanggannya
Berikut ini metode yang saya gunakan untuk dapat membaca character imagenya. Dan Tahapan-tahapan yang dipakai yaitu capture, prepare image, localize, connected component analysis, segmentation, dan character recognition seperti pada Gambar 2. Sistem ini dibuat agar bisa mendeteksi 2 plat tersebut dan membedakan angka Kwh dan angka nomor pelanggan.
 
Gambar 2
A.    Capture
Pada tahap ini, gambar dari kWh meter PLN diambil dengan kamera yang beresolusi tinggi untuk meningkatkan rasio keberhasilan yaitu kWh meter pada Gambar 3.
B.    Prepare Image
Pada tahap ini dilakukan pendeteksian label merah pada nomor pelanggan dan menghilangkan label merah tersebut. Label merah akan mempengaruhi hasil dari tahapan localize sehingga karakter yang ingin dideteksi tidak terbaca dikarenakan gradasi warna antara angka dan label merah.  Kita akan menggunakan histogramchannel merah pada label merah yang sudah ditandai posisinya dengan menentukan rentang warna merah yang lebih terang. Setelah itu, bandingkan gambar berlabel merah dengan rentang yang telah ditentukan dan cocokkan lalu ganti pixel-nya menjadi warna putih.
C.    Localize
Gambar hasil preprocess diubah ke dalam bentuk binarisasi gambar, gambar dikonverter ke hitam dan putih untuk menyorot karakter dan memperjelasbackground. Tahapan ini dilakukan dengan menggunakan teknik tharesholding, dapat dilihat pada Gambar 4.
D.    Connected component analysis
Pada tahap ini, karakter pada gambar diidentifikasi dengan mencari pixel yang terhubung. Apabila telah ditemukan maka kumpulan karakter diberi label.
E.    Segmentation
Pada tahap ini dilakukan proses pemotongan gambar yang telah diberi label dengan menggunakan algoritma Image Scissoring. Gambar ditelusuri secara vertikal dan horizontal, dan akan memotong daerah yang tidak terdapat warna putih lalu disimpan secara terpisah.
F.    Character Recognition
Kumpulan karakter yang telah dipisah diterjemahkan oleh mesin OCR dan menghasilkan kode ASCII, dapat dilihat pada Gambar 5.  
Gambar 3

Gambar 4

Gambar 5
Dan berikut ini adalah code untuk pembacaan karakter yang ada dalam image, dan saya batasi hanya untuk angka saja.
1
2
3
4
5
6
7
8
9
10
public partial class OCRForm : Form
    {
        private Tesseract _ocr;
        public OCRForm()
        {
            InitializeComponent();
            _ocr = new Tesseract("tessdata", "eng", Tesseract.OcrEngineMode.OEM_TESSERACT_CUBE_COMBINED);
            _ocr.SetVariable("tessedit_char_whitelist", "1234567890");
            //languageNameLabel.Text = "eng : tesseract + cube";
        }
Lalu berikut ini code untuk menghilangkan label merah yang terdapat angka.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
private Image<Bgr, Byte> replaceRedLabel(Image<Bgr, Byte> mimage)
        {
            Image<Bgr, Byte> image = mimage.Clone();
     
            double mhRs = 130;
            double mhRe = 170;
 
            double mhGs = 40;
            double mhGe = 70;
 
            double mhBs = 50;
            double mhBe = 80;
 
            // % ---------------------------- %
 
            double mpRs = mhRe + 1;
            double mpRe = 230;
 
            double mpGs = 40;
            double mpGe = 80;
 
            double mpBs = 60;
            double mpBe = 100;
 
            // % ---------------------------- %
 
            int r = image.Size.Height;
            int c = image.Size.Width;
 
            Debug.WriteLine("Start digging");
 
            int blue = 0;
            int green = 1;
            int red = 2;
 
            for (int i = 0; i < r; i++)
            {
                for (int j = 0; j < c; j++)
                    //% merah putih.
                    if ((image.Data[i, j, red] >= mpRs && image.Data[i, j, red] <= mpRe) && (image.Data[i, j, green] >= mpGs && image.Data[i, j, green] <= mpGe) && (image.Data[i, j, blue] >= mpBs && image.Data[i, j, blue] <= mpBe))
                    {
                        //Debug.WriteLine("Going in red-white");
                        //Debug.WriteLine("RW: "+image2.Data[i,j,0]);
                        image.Data[i, j, blue] = 255;
                        image.Data[i, j, green] = 255;
                        image.Data[i, j, red] = 255;
                    }
                    else if ((image.Data[i, j, red] >= mhRs && image.Data[i, j, red] <= mhRe) && (image.Data[i, j, green] >= mhGs && image.Data[i, j, green] <= mhGe) && (image.Data[i, j, blue] >= mhBs && image.Data[i, j, blue] <= mhBe))
                    {
                        //Debug.WriteLine("Going in red-black");
                        //Debug.WriteLine("RB: " + image2.Data[i, j, 0]);
                        image.Data[i, j, blue] = 0;
                        image.Data[i, j, green] = 0;
                        image.Data[i, j, red] = 0;
                    }
            }
 
            return image;
        }
 
        private Image<Hsv, Byte> replaceRedLabelHSV(Image<Bgr, Byte> mimage)
        {
            Image<Hsv, Byte> image = mimage.Convert<Hsv, Byte>().Clone();
            int hue = 0;
            int saturation = 1;
            int value = 2;
 
            int w = image.Width;
            int h = image.Height;
 
            for (int i = 0; i < h; i++)
            {
                for (int j = 0; j < w; j++)
                {
                    //Debug.WriteLine(image.Data[i, j, hue]);
                    if (image.Data[i, j, hue] > (170))
                    {
                        //image.Data[i, j, saturation] = 0;
                        image.Data[i, j, value] = 255;
                    }
                }
            }
 
            return image;
        }
dan berikut ini hasil keseluruhannya.

Saturday 10 October 2015

VB6.0 :: Tutorial Membuat Inject Dengan VB6


Dalam membuat aplikasi injector yang harus patut kita ketahui adalah alamat proxy provider dan portnya dan juga http 
Aplikasi  injcetor  sebenarnya  adalah sebuah  aplikasi  server  sehingga proxy sederhana yang di modifikasi sedemikian rupa untuk memanipulasi data yang akan di kirim ke proxy provider.  Setiap provider akan berbeda topologi / alur modifikasi pengiriman data nya tapi bila anda sudah tau dasar dari aplikasi ini anda
bisa dengan mudah menyesuaikan dengan provider yang anda gunakan.
Dalam studi kasus ini kami mengambil sample provider XL dan menggunakan pemrogramam Visual Basic, dan sekali lagi kalau  anda  sudah  paham  dasarnya  anda  bisa  implementasikan  dengan  semua  bahasa  pemrograman  ,  baik delphi,c#/c++,phyton  bahkan  java
langsung saja Sebelum kita mulai kita harus mengetahui hal sebagi berikut:
Studikasus Provider XL
IP proxy = 202.152.240.50
Port proxy = 8080
Data header injeksi = “DELETE http://news.okezone.com/ HTTP/1.1" & vbCr & "Host:news.okezone.com" & vbCr & vbCr”


1. Mulailah dengan New Project, pilih standar EXE

2.  Kemudian Muncul form

3. Kita memerlukan Component tambahan namanya Winsock, berikut cara menambahkannya








4. Maka pada sisi kiri layer akan nampak simbol winsock seperti ini

5. Kemudian masukka funsi seperti dibawah ini

-  Winsock1
Name = sockLokal
Index = 0
-  Winsock2
Name = sockProxy
Index = 0
-  textbox
name = listenPort
text = 2222
-  CommandButton
Caption = ON
-  Timer1
Index=0
Interval = 1000
Enable = false


Maka akan tampil di form sebagai berikut
Berikut Penjelasannya:
  • SockLokal berfungsi untuk mengirim dan menerima data di komputer kita
  • SockProxy berfungsi untuk menerima data dari proxy provider
  • karena di sini kita kan membuat jalur multy koneksi jadi winsock dan timer harus berupa array dan patut untuk di mengerti sebuah array di mulai dari 0 bukan 1.

Kemudian kita akan memulai coding:
untuk memunculkan area coding lebih mudahnya double klik saja di area Form 1, berikut codingnya:

‘CODE___
Option Explicit
Dim dataLokal(255) As String
Dim dataInject As String
Dim i, cek As Integer
‘CODE___
 Yang pertama kita lakukan adalah deklarasi vriabel yang di butuhkan
-  “dataLokal(255)”  , berfungsi untuk menyimpan data yang di ambil dari  “sockLokal”, perhatikan “(255)” ini menandakan bahwa variable “dataLokal” berupa array dan maksimal arraynya sebanyak 255
-  “dataInject”, berfungsi untuk menyimpan sebuah data http header yang nantinya akan di kirim ke proxy
provider yang bertujuan untuk melakukan kamulfase data , atau yang sering orang2 bilang “host” header.
================================================================================
‘CODE___
Private Sub Form_Load()
dataInject = "DELETE http://news.okezone.com/ HTTP/1.1" & vbCr & "Host:news.okezone.com" & vbCr & vbCr
End Sub
‘CODE___
Proses  diatas  menerangakan  pengisian  “dataInject”  dengan  data  http  header  ,  pada  saat  form  di  load,  dan  perhatikan
“vbCr” yaitu merupakan sebuah karakter newline atau garis baru ada 3 tipe newline di visual basic
vbCr = untuk system unix/linux
vbLf = untuk system mac
vbCrLf = untuk system windows
tergantung kebutuhan dan kondisi kita akan menggunakan yang mana .
================================================================================
‘CODE___
Private Sub sockLokal_ConnectionRequest(Index As Integer, ByVal requestID As Long)
i = i + 1
Load sockLokal(i)
Load sockProxy(i)
Load Timer1(i)
sockLokal(i).Close
sockLokal(i).Accept requestID
End Sub
‘CODE___
Fungsi di atas berfungsi sebagai penerimaan request data yang datang melalui “sockLokal” dan sekaligus melakukan proses
load winsock dan timer untuk menentukan array keberapa berdasar request yang di terima.
================================================================================
‘CODE___
Private Sub sockLokal_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sockLokal(Index).GetData dataLokal(Index)
If InStr(dataLokal(Index), "GET ") > 0 Then
sockLokal(Index).Close
Exit Sub
End If
If sockProxy(Index).State = 0 Then
sockProxy(Index).RemoteHost = "202.152.240.50"
sockProxy(Index).RemotePort = 8080
sockProxy(Index).Connect
End If
If sockProxy(Index).State = 7 Then
sockProxy(Index).SendData dataLokal(Index)
End If
End Sub
‘CODE___
Fungsi di atas berjalan ketika proses koneksi sudah terjalin antara komputer kita ke sockLokal, Fungsi if pertama berguna untuk memutus koneksi ketika di deteksi ada request “GET” daari komputer kita ( mengatisipasi agar program injector tidak
bisa langsung  di  gunakan  di  browser  /direct/polos),If  yang  ke  dua  berfungsi  membangun  koneksi  ke  proxy  provider  jika kondisi /status koneksi belum terhubung,  IF yang ketiga jika koneksi sudah terhubung maka data dari “sockLokal” akan di kirimkan ke proxy provider melalui “sockProxy”
================================================================================
‘CODE___
Private Sub sockProxy_Connect(Index As Integer)
sockProxy(Index).SendData dataInject
cek = 0
Timer1(Index).Enabled = True
End Sub
‘CODE___
Fungsi  di  atas  berjalan  ketika  “sockProxy”  prtama  kali  terkoneksi  dengan  proxy  provider,  kemudia  melakukan  proses pengiriman data “dataInject” ke proxy provider untuk membuka jalur ke proxy provider yang nantinya  akan di kirim data yang  sebenarnya  dari  “sockLokal”,  perhatikan  variable  “cek”  kita  isikan  0  untuk  menandakan  bahwa  data  sebenarnya belum di kirim, kemudian me enable/ mengaktifkan timer1.
================================================================================
‘CODE___
Private Sub Timer1_Timer(Index As Integer)
If cek = 0 Then
If sockProxy(Index).State = 7 Then
sockProxy(Index).SendData dataLokal(Index)
End If
End If
Timer1(Index).Enabled = False
End Sub
‘CODE___
Fungsi di atas berjalan ketika “Timer1” di aktifkan / enable’kan, dia akan mengecek apakah data sebenarnya sudah di kirim atau belum berdasar isi dari variable “cek”, jika belum / atau nilainya 0 maka akan di lakukan proses pengiriman data yang sebenarnya  ke  proxy  provider,  kemudian  menonaktifkan  “timer1”  itu  sendiri  agar  tidak  mengirim  data  secara  terus menerus.
================================================================================
‘CODE___
Private Sub sockProxy_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim dataProxy As String
sockProxy(Index).GetData dataProxy
If cek = 1 Then
If sockLokal(Index).State = 7 Then
sockLokal(Index).SendData dataProxy
End If
Else
cek = 1
End If
End Sub
‘CODE___
Fungsi di atas berjalan ketika koneksi ke  proxy provider sudah terjalin melalui “sockProxy”, kemudian membuat variable baru untuk menampung data respon sementara dari proxy provider dengan nama “dataProxy” .Perhatikan proses di awal tadi kita sudah mengirimkan 2 kali request ke proxy provider yang pertama data inject dan data aslinya,  nah  otomatis  respon  juga  akan  menjadi  dua  tipe  yang  pertama  respon  dari  data  inject  kemudian  yang  kedua respon dari data sebenarnya / asli, maka kita akan memilih data yang akan kita kirim ke komputer kita adalah re spon yang data asli bukan data inject dengan cara mengecek nilai dari variable “cek” , pada proses sebelumnya “cek” masih bernilai 0 , maka kita lihat   jika “cek” bernilai 1 maka respon dari proxy provider akan di kirim ke komputer melalui “sockLokal”, kap an
nilai  “cek”  1  ?  Pada  fungsi  ini  merupakan  perulangan  jadi  respon  pertama  dalah  dari  respon  inject  dan  kemudian  kita mengisi  nilai  “cek”   1  maka  akan  terjadi  perulangan  lagi  untuk  respon  ke  dua  dan  nilai  “cek”  sudah  1.  Semoga  anda mengerti :D
================================================================================
‘CODE___
Private Sub sockProxy_Close(Index As Integer)
sockProxy(Index).Close
sockLokal(Index).Close
End Sub
‘CODE___
Fungsi di atas berjalan ketika jalur koneksi ke proxy provider terputus baik itu karena erro/atau di putus dari provider, maka semua jalur akan di putus baik jalur “sockProxy” atau “sockLokal” untuk mengantisipasi koneksi menjadi bengong :D
================================================================================
‘CODE___
If tombol.Caption = "ON" Then
tombol.Caption = "OFF"
sockLokal(0).LocalPort = listenPort.Text
sockLokal(0).Listen
Else
tombol.Caption = "ON"
sockLokal(0).Close
End If
‘CODE___
Fungsi di atas berjalan ketika  tombol “ON” di klik, kami tidak akan menerangkan silahkan lihat sendiri dan pahami fungsi di atas :D


SOURCE CODE LENGKAP:
Option Explicit
Dim dataLokal(255) As String
Dim dataInject As String
Dim i, cek As Integer
Private Sub Form_Load()
dataInject = "DELETE http://news.okezone.com/ HTTP/1.1" & vbCr & "Host:news.okezone.com" & vbCr & vbCr
End Sub
Private Sub sockLokal_ConnectionRequest(Index As Integer, ByVal requestID As Long)
i = i + 1
Load sockLokal(i)
Load sockProxy(i)
Load Timer1(i)
sockLokal(i).Close
sockLokal(i).Accept requestID
End Sub
Private Sub sockLokal_DataArrival(Index As Integer, ByVal bytesTotal As Long)
sockLokal(Index).GetData dataLokal(Index)
If InStr(dataLokal(Index), "GET ") > 0 Then
sockLokal(Index).Close
Exit Sub
End If
If sockProxy(Index).State = 0 Then
sockProxy(Index).RemoteHost = "202.152.240.50"
sockProxy(Index).RemotePort = 8080
sockProxy(Index).Connect
End If
If sockProxy(Index).State = 7 Then
sockProxy(Index).SendData dataLokal(Index)
End If
End Sub
Private Sub sockProxy_Connect(Index As Integer)
sockProxy(Index).SendData dataInject
cek = 0
Timer1(Index).Enabled = True
End Sub
Private Sub Timer1_Timer(Index As Integer)
If cek = 0 Then
If sockProxy(Index).State = 7 Then
sockProxy(Index).SendData dataLokal(Index)
End If
End If
Timer1(Index).Enabled = False
End Sub
Private Sub sockProxy_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim dataProxy As String
sockProxy(Index).GetData dataProxy
If cek = 1 Then
If sockLokal(Index).State = 7 Then
sockLokal(Index).SendData dataProxy
End If
Else 
cek = 1
End If
End Sub
Private Sub sockProxy_Close(Index As Integer)
sockProxy(Index).Close
sockLokal(Index).Close
End Sub
Private Sub tombol_Click()
If tombol.Caption = "ON" Then
tombol.Caption = "OFF"
sockLokal(0).LocalPort = listenPort.Text
sockLokal(0).Listen
Else
tombol.Caption = "ON"
sockLokal(0).Close
End If
End Sub

Pastekan kode diatas untuk lebih mudahnya
Jika sudah selesai coba jalankan injec tersebut dan diaplikasikan pada bitvise. sebagai catatan kemungkinan XL telah menutup port 22 jadi coba saja dengan SSH selain port tersebut

HARDWARE :: SIM900 Quad-band GSM GPRS Shield


SIM900 Quad-band GSM GPRS Shield
Deskripsi:
GPRS Shield ini menggunakan SIM900 dari SIMCOM dan kompatible dengan arudino. GPRS shield digunakan untuk berkomunikasi menggunakan jaringan GSM telephon. Shield mengijinkan pengguna untuk melakukan SMS,MMS,GPRS, dan Audio menggunakan UART dengan mengirimkan perintah atau dalam hal ini AT Commands. Shield ini memiliki 12 pin GPIO, 2 PWM, dan ADC.
Fitur:
1. Quad-Band 850 / 900/ 1800 / 1900 MHz – Bisa digunakan pada jaringan GSM diberbagai negara.
2. GPRS multi-slot class 10/8
3. GPRS mobile station class B
4. Compliant to GSM phase 2/2+
5. Class 4 (2 W (AT) 850 / 900 MHz)
6. Class 1 (1 W (AT) 1800 / 1900MHz)
7. Perintah menggunakan AT Command – Standard Commands: GSM 07.07 & 07.05 | Enhanced Commands: SIMCOM AT Commands.
8. Layanan Pesan Singkat
9. Embedded TCP/UDP stack – Dapat Upload data ke web server
10. Support RTC
11. Pemilihan Port Serial
12. Terdapat Jack speaker dan headphone
13. Konsumsi daya rendah – 1.5mA(sleep mode)
14. Bekerja pada temperatur – -40C to +85 C
Hardware Diagram
http://www.4shared.com/file/15qahfLiba/Hardware_Diagram.html
Link Referensi: http://www.instructables.com/id/Use-SIM900-GPRSGSM-Shield-on-pcDuino/?ALLSTEPS
http://wiki.iteadstudio.com/IComSat

Friday 9 October 2015

FLASH :: Contoh Media Pembelajaran Bahasa Arab Flash


Sebelumnya saya membuat contoh media pembelajaran Bahasa Inggris dengan flash dan contoh media pembelajaran Bahasa Perancis Flash, kali ini saya membuat versi Arabnya.

untuk mendownload silahkan klik kanan kemudian save link as disini
Download SWF Download FLA
Dan ini juga untuk mencocokkan gambar.

Download SWF
Bila ada berminat untuk dibuatkan media pembelajaran berbasis flash.
saya siap melayani. terima kasih 

FLASH :: Contoh Media Pembelajaran Bahasa Perancis Flash


Sebelumnya saya membuat contoh media pembelajaran Bahasa Inggris dengan flash. Berikut ini saya membuat versi bahasa Prancis dan ini juga versi bahasa Arab sekalian. hehehe.

untuk mendownload silahkan klik kanan kemudian save link as disini
Download SWF
Bila ada berminat untuk dibuatkan media pembelajaran berbasis flash.
saya siap melayani. terima kasih 

FLASH :: Contoh Media Pembelajaran Bahasa Inggris Flash

ini adalah contoh sederhana media pembelajaran bahasa Inggris untuk anak kecil.


untuk mendownload silahkan klik kanan kemudian save link as disini
Bila ada berminat untuk dibuatkan media pembelajaran flash.
saya siap melayani. terima kasih

FLASH :: Download Media Pembelajaran


Media pembelajaran merupakan alat bantu dalam proses belajar dan mengajar untuk memberikan kemudahan bagi para guru dalam menyampaikan materi pelajaran pada peserta didiknya. Kita menyadari bahwa tanpa bantuan media pembelajaran, maka materi pelajaran sukar untuk dicerna dan dipahami oleh siswa, terutama materi pelajaran yang rumit, komplek, abstrak dan tidak memungkinkan untuk melakukan praktikum secara langsung.
Untuk itu saya mencoba berbagi media pembelajaran. Mudah-mudahan bermanfaat bagi kita semua... Amiiin.
Berikut ini saya sajikan media pembelajaran dalam bentuk file Flash (swf) dan file powerpoint. Silahkan download sepuasnya gratis tidak di pungut biaya sepeserpun.
Untuk File Animasi Flash (swf):
IPA (Biologi, Fisika, Kimia)
Biologi Fisika Kimia
 Sel Tumbuhan, Momentum Sudut Asam Basa
 Sistem Pencernaan  Pada  Manusia, Gerak Lurus Berubah  Beraturan (GLBB) Elektro kimia
 Pembentukan Urine, Energi Mekanik Hidrolisis Garam Air
 Sel Hewan, Efek Dopler Hk. GayLussac Hk.  Avogadro
 DNA alat ukur listrik, Halogen
 Fertilisasi Pemuaian, ALKALI TANAH
 BACIDIOMYCOTA Filariasis KESETIMBANGAN KIMIA
 Asma Keseimbangan Benda Tegar Kesetimbangan Larutan
 GAMETOGENESIS Konfigurasi Elektron Kelarutan Hasilkali Kelarutan
 DBD MomentumLinear Hk.Hess
 JANTUNG KORONER ListrikStatis Karbon Senyawanya
 LUMUT RANGKAIANR-L-C Kegagalan Aturan Oktrt
 PembuahanGanda PERAMBATAN KALOR Ikatan Kovalen Polar Nonpolar
 MITOSIS Radiasi Benda Hitam LAJUREAKSI
 Mad Cow Teori Kinetik Gas LARUTAN ELEKTROLIT
 Penyakit Flu Burung TRANSISTOR LarutanBuffer
 PertumbuhanTumbuhan Struktur Geometri Ion Kompleks SISTEMKOLOID
 Virus Teropong Polimer
 TUMBUKAN SIFATKOLIGATIF LARUTAN
 STOKIOMETRI
 PENYETARAAN REAKSIREDOKS
 TeoriAtomBohr

Matematika

Untuk File Powerpoint:




Cara download:
Setelah mengklik link di atas nanti akan masuk ke AdF.ly tunggu 5 detik akan muncul Skip Ads di pojok kanan atas, klik Skip Ads dipojok kanan atas. Tunggu sebentar akan masuk pada link download ziddu.com.


Read more: http://memetmulyadi.blogspot.co.id/p/download-media-pembelajaran.html#ixzz3o8O6HVsw