Wednesday, October 9, 2024

VBA Send JSON to HTTP POST PHP

 VBA

Sub SendJsonData()

    On Error GoTo ErrorHandler


    ' Create an object for ServerXMLHTTP

    Dim xmlhttp As Object

    Set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP.6.0")


    ' Define the URL where the data will be sent

    Dim url As String

    url = "https://192.168.0.88/xampp/API/P1.php" ' Modify the URL accordingly


    ' Create the JSON Payload

    Dim jsonData As String

    Set ws = ThisWorkbook.Sheets("Sheet1")

    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row

    

   'jsonData = "{""name"":""John"",""value"":30}"

    For i = 2 To lastRow

        jsonData = "{""name"":""" & ws.Cells(i, 1).Value & """, ""value"":""" & ws.Cells(i, 2).Value & """}"

        If i < lastRow Then

            jsonData = jsonData & ","

        End If

    Next i

    


    ' Set the Method and open the connection

    xmlhttp.Open "POST", url, False


    ' Bypass SSL Certificates validation (for self-signed certificates only)

    xmlhttp.setOption 2, 13056 ' Ignore SSL certificate errors


    ' Set HTTP Header to indicate that the data is JSON

    xmlhttp.setRequestHeader "Content-Type", "application/json"


    ' Send the JSON data

    xmlhttp.send jsonData


    ' Check the status of the request

    If xmlhttp.Status = 200 Then

        MsgBox "Data sent successfully: " & xmlhttp.responseText

    Else

        MsgBox "Error: " & xmlhttp.Status & " - " & xmlhttp.statusText

    End If


    ' Close the connection

    Set xmlhttp = Nothing

    Exit Sub


ErrorHandler:

    MsgBox "Error occurred: " & Err.Description

End Sub

PHP

<?php

// ตั้งค่า Header เพื่อระบุว่าคำตอบเป็น JSON และอนุญาตการเชื่อมต่อ CORS (ถ้าจำเป็น)

header("Content-Type: application/json");

header("Access-Control-Allow-Origin: *");


// ข้อมูลการเชื่อมต่อฐานข้อมูล MySQL

$servername = "192.168.0.88"; // หรือ IP ของเซิร์ฟเวอร์ฐานข้อมูล

$username = "prapop";        // ชื่อผู้ใช้ MySQL (เปลี่ยนตามจริง)

$password = "";            // รหัสผ่านของ MySQL (เปลี่ยนตามจริง)

$dbname = "test";    // ชื่อฐานข้อมูล


// สร้างการเชื่อมต่อฐานข้อมูล

$conn = new mysqli($servername, $username, $password, $dbname);


// ตรวจสอบการเชื่อมต่อ

if ($conn->connect_error) {

    die(json_encode([

        'status' => 'error',

        'message' => 'Connection failed: ' . $conn->connect_error

    ]));

}


// ตรวจสอบว่าคำขอเป็น POST หรือไม่

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    // รับข้อมูล JSON ที่ส่งมา

    $json = file_get_contents('php://input');

    

    // แปลง JSON ให้เป็น Array หรือ Object

    $data = json_decode($json, true);


    // ตรวจสอบว่าการแปลงสำเร็จหรือไม่

    if ($data === null) {

        // กรณีที่ข้อมูล JSON ไม่ถูกต้อง

        echo json_encode([

            'status' => 'error',

            'message' => 'Invalid JSON'

        ]);

    } else {

        // เข้าถึงข้อมูลที่ส่งมา

        $name = $data['name'];

        $value = $data['value'];


        // เตรียมคำสั่ง SQL สำหรับบันทึกข้อมูล

        // ตรวจสอบว่า prepare สำเร็จหรือไม่

        $stmt = $conn->prepare("INSERT INTO T1 (name, value) VALUES (?, ?)");


        if ($stmt === false) {

            die(json_encode([

                'status' => 'error',

                'message' => 'Prepare failed: ' . $conn->error

            ]));

        }


        $stmt->bind_param("si", $name, $value); // ผูกตัวแปรเพื่อป้องกัน SQL Injection


        // ตรวจสอบการบันทึกข้อมูล

        if ($stmt->execute()) {

            // สำเร็จ

            echo json_encode([

                'status' => 'success',

                'message' => 'Data inserted successfully',

                'name' => $name,

                'value' => $value

            ]);

        } else {

            // เกิดข้อผิดพลาด

            echo json_encode([

                'status' => 'error',

                'message' => 'Error inserting data: ' . $stmt->error

            ]);

        }


        // ปิด statement

        $stmt->close();

    }

} else {

    // กรณีที่ไม่ใช่คำขอแบบ POST

    echo json_encode([

        'status' => 'error',

        'message' => 'Only POST requests are allowed'

    ]);

}


// ปิดการเชื่อมต่อฐานข้อมูล

$conn->close();

?>


MYSQL

CREATE TABLE T1 (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(255) NOT NULL,

    value VARCHAR(255) NOT NULL

);


Tuesday, September 17, 2024

complie opencv with gpu support (cuda)

THE BEST


Build and Install OpenCV 4.5.1 with CUDA GPU บน Windows 10 แบบละเอียดยิบ

ติดตั้ง OpenCV v.4.5.1 เพื่อรันบน CUDA GPU บน Windows 10 ด้วยการ makefile มาเริ่มกันเลยครับ

  1. ขั้นตอนการเตรียมความพร้อมของระบบ
  2. ติดตั้ง OpenCV 4.5.1 for CUDA GPU

1.ขั้นตอนการเตรียมความพร้อมของระบบ

1.1 เตรียมความพร้อมของระบบโดยทำการติดตั้ง package ต่อไปนี้ก่อน

  • Ananconda Python 3.8
  • Microsoft Visual C++ 2015–2019 Redistributable (x64)
  • NVIDIA CUDA
  • cuDNN

สามารถดูได้จากบทความ การติดตั้ง TensorFlow GPU v. 2.4.1 Python 3.8 บน Windows 10 แบบง่าย

1.2 ติดตั้ง CMake ในบทความนี้ใช้ cmake-3.19.4-win64-x64.msi

1. https://cmake.org

1.3 สร้างโฟรเดอร์สำหรับ build project ในที่นี้จะสร้างไว้ที่ OpenCV-Build

1.4 Download OpenCV 4.5.1 Source จากเว็ป https://opencv.org/releases/ และทำการแตกไฟล์ไว้ที่พาธ OpenCV-Build

2. https://opencv.org/releases

1.5 Download opencv_contrib จากเว็ป https://github.com/opencv/opencv_contrib และทำการแตกไฟล์ไว้ที่พาธ OpenCV-Build

3. OpenCV_Build

2.ติดตั้ง OpenCV 4.5.1 for CUDA GPU

2.1 สร้างโฟลเดอร์ build และ install ไว้ที่พาธ C:\OpenCV-Build

4. folder for makefile

2.2 เปิดโปรแกรม CMake
- กำหนดพาธ Where is the source code: ไว้ที่ C:/OpenCV-Build/opencv-4.5.1
- กำหนดพาธ Where to build the binaries: ไว้ที่ C:/OpenCV-Build/build
- ติ๊กช่อง Grouped

5. Cmake config #1

2.3 ที่ Configure > Optional platform for generator เลือก x64

6. Cmake config #2

2.4 หากสำเร็จจะได้ผลลัพธ์ตามรูปที่ 7.

7. Result of the first config step

2.5 ค้นหาและเลือกตรงช่อง WITH_CUDA

8. Cmake config #3

2.6 ค้นหาและเลือกตรงช่อง BUILD_opencv_dnn

9. Cmake config #4

2.7 ค้นหาและเลือกตรงช่อง OPENCV_DNN_CUDA

10. Cmake config #5

2.8 ค้นหาและเลือกตรงช่อง ENABLE_FAST_MATH

11. Cmake config #6

2.9 ค้นหาและเลือกตรงช่อง BUILD_opencv_world

12. Cmake config #7

2.10 ให้แน่ใจว่า ได้เลือกทั้งสามตัวนี้แล้ว BUILD_opencv_python3, BUILD_opencv_python_bindings_generator, BUILD_opencv_python_tests

13. Cmake config #8

2.11 กำหนดพาธ ตรงช่อง OPENCV_EXTRA_MODULES_PATH

เป็น C:/OpenCV-Build/opencv_contrib-4.5.1/modules กด Configure

14. Cmake config #9

2.12 หลังจากนั้น ให้ค้นหาและเลือกตรงช่อง CUDA_FAST_MATH

15. Cmake config #10

2.13 หลังจากนั้น ให้ค้นหาและเลือกตรงช่อง CUDA_ARCH_BIN

16. Cmake config #11

ค้นหารุ่นการ์ดจอด้วยคำสั่ง

nvidia-smi

ในที่นี้ใช้ GeForce GTX 1650 ตามรูปที่ 17

17. nvidia-smi

จากนั้นให้ไปที่เว็ป https://en.wikipedia.org/wiki/CUDA เพื่อค้นหา Compute
capability (version)

18. en.wikipedia.org/wiki/CUDA

ในที่นี้คือค่า 7.5 นำไปใส่ในช่อง CUDA_ARCH_BIN ดังรูปที่ 19

19. Compute capability CUDA_ARCH_BIN version

2.14 ค้นหาและเลือกตรงช่อง CMAKE_INSTALL_PREFIX

แล้วแก้ไขพาธเป็น C:/OpenCV-Build/install ดังรูปที่ 20

20. Cmake config #12

2.15 ค้นหาและเลือกตรงช่อง CMAKE_CONFIGURATION_TYPES ลบ Debug ออก เหลือแค่ Releaseดังรูปที่ 21. กด Configure

21. Cmake config #13

2.16 จะได้ผลลัพธ์ตามรูปที่ 22 จากนั้นกดปุ่ม Generate

22. Cmake config #14

2.17 เปิด Command prompt (Run as administrator) และรันคำสั่งนี้

"C:\Program Files\CMake\bin\cmake.exe" --build "C:\OpenCV-Build\build" --target INSTALL --config Release
23. Makefile

ซึ่งขั้นตอนนี้จะใช้เวลานานพอสมควร รอจนกว่าจะเสร็จสิ้นกระบวนการ

24. Makefile complete

หลังจากที่รอกันมานานนม เราก็จะสามารถใช้งาน OpenCV v4.5.1 ได้แล้ว โดยรันคำสั่ง

python
import cv2
print(cv2.__version__)
25. Finally Installation Completed

จะได้ผลลัพธ์การรัน OpenCV บน base environment ดังรูป

++ Special plus การติดตั้ง OpenCV บน environment อื่น !!

conda -n opencv-gpu python==3.8
conda activate opencv-gpu

ที่ CMake กำหนดค่า python3 ให้ชี้ไปที่พาธที่สร้าง environment ไว้ กด Configure, Gennerate และทำขั้นตอนที่ 2.17 อีกครั้ง

กำหนดค่า CMake
ผลลัพธ์การรัน OpenCV บน New Environment

จะได้ผลลัพธ์ดังรูป ขอขอบคุณทุกท่านที่อ่านมาถึงตรงนี้ หวังว่าคงจะมีประโยชน์ไม่มากก็น้อยนะครับ ในบทต่อไป เราจะมารันโปรแกรมที่ใช้ OpenCV บน GPU กันต่อครับ ขอบคุณครับ


CR
1. https://amornpan.medium.com/build-and-install-opencv-4-5-1-with-cuda-gpu-%E0%B8%9A%E0%B8%99-windows-10-%E0%B9%81%E0%B8%9A%E0%B8%9A%E0%B8%A5%E0%B8%B0%E0%B9%80%E0%B8%AD%E0%B8%B5%E0%B8%A2%E0%B8%94%E0%B8%A2%E0%B8%B4%E0%B8%9A-5751c56e8c5c
2. https://www.youtube.com/watch?v=YsmhKar8oOc

3. https://jordanbenge.medium.com/anaconda3-opencv-with-cuda-gpu-support-for-windows-10-e038569e228

  --3. was useful--

4. if install new python need to  --> pip install numpy

5.dnn lib copy lib match version into cuda vX.X