Sử dụng Keras trên Anaconda3 – Deep learning để phân loại ảnh

https://nttuan8.com/bai-7-gioi-thieu-keras-va-bai-toan-phan-loai-anh/
Có code test.

Cách cài đặt Keras trên Anaconda 3- Win 10:

Trong mục Environments chọn All nhập keras và nhấn tìm kiếm.

Tích vào keras, keras-base, keras-applications, keras-preprocessing. Sau đó nhấn Apply để cài đặt.

Sử dụng Python kết nối CSDL Oracle bằng Anaconda

Anaconda là 1 tool trên Windown giúp học và sử dụng Python được dễ dàng hơn. Bài viết này sẽ ghi lại các thao tác cài đặt để có thể sử dụng Python kết nối với CSDL Oracle.

  • B1: Chuẩn bị sẵn Anaconda3
  • B2: Cài đặt thư viện cx_oracle làm cầu nối giao tiếp giữa Python và Oracle
    Trong phần quản trị của Anaconda, chọn tab Environments.
    Trong màn hình này chọn All và nhập tìm kiếm cx_oracle
  • B3: Tích chọn vào cv_oracle và ấn Apply. chờ 1 chút để việc cài đặt hoàn tất.
  • B4: Để test, tạo mới một Notebook Jupiter, và nhập thử như sau:
import cx_Oracle
dsn_tns = cx_Oracle.makedsn('192.168.177.xxx' , 1522, 'oracl')
connection = cx_Oracle.Connection('admin','admin',dsn_tns)
ver=connection.version
print('DB version : '+ ver)
cur=connection.cursor()
cur.execute('Select name from v$database')
for result in cur:
    print('DB Name : ' + result[0])
cur.close()
connection.close 

Kết quả hiển thị thành công:

DB version : 11.2.0.4.0
DB Name : ORACL

Phát hiện đối tượng real-time với YOLO

YOLO là một thư viện sử dụng trí tuệ nhân tạo để phát hiện đối tượng real-time trong ảnh và video. Ta có thể sử dụng YOLO với nhiều ngôn ngữ khác nhau như Python, Javascript, C++… YOLO xử lý ảnh có thể sử dụng GPU hoặc OPENCV
Trang chủ của YOLO: https://pjreddie.com/darknet/yolo/#demo

Phát hiện đối tượng với YOLO
Phát hiện đối tượng với YOLO

Cài đặt YOLO trên máy ảo

  • Thiết lập máy ảo CENTOS 7
  • Cài đặt git: sudo yum install git
  • cài đặt GCC: # yum group install “Development Tools”
  • Clone project darknet: git clone https://github.com/pjreddie/darknet
  • Cài đặt OPEN CV
    yum install cmake gcc gtk2-devel numpy pkconfig -y
    cd
    wget https://github.com/opencv/opencv/archive/3.4.2.zip
    unzip 3.4.2.zip
    https://www.vultr.com/docs/how-to-install-opencv-on-centos-7
  • Sửa file Makefile dòng OPENCE từ 0 thành 1
  • Biên dịch darknet:
    cd darknet
    make
  • Tải trọng số có sẵn đã được train: wget https://pjreddie.com/media/files/yolov3.weights
  • Test: ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

Một số địa chỉ tham khảo:

https://www.blog.pythonlibrary.org/2018/06/05/creating-pdfs-with-pyfpdf-and-python/

https://pjreddie.com/darknet/yolo/#demo

https://www.vultr.com/docs/how-to-install-opencv-on-centos-7

Dùng python call webservice XML SOAP

Sau một hồi vật vã tìm kiếm thì mới tìm thấy cách sử dụng python để gọi một 1 webservice XML sử dụng SOAP.
Webservice XML được tạo ra bởi .NET và sử dụng .NET để gọi thì đơn giản rồi. Bây giờ mình muốn sử dụng Python thì cũng khá phức tạp, tìm mãi mới thấy cách dùng:

Code:

import requests
url="http://xxx.xxx.xxx:8668/xxx/WHOLESALESTATISTIC.asmx?WSDL"
#headers = {'content-type': 'application/soap+xml'}
headers = {'content-type': 'text/xml'}
body = """<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><WholesaleStatistic xmlns="http://tempuri.org/">  <Account>xxx</Account> <Password>[email protected]</Password> <sDate>2019-02-17</sDate></WholesaleStatistic>  </soap:Body></soap:Envelope>"""

response = requests.post(url,data=body,headers=headers)
print(response.content)

Kết quả sẽ trả về định dạng XML, từ đây có thể lấy dữ liệu ra bằng cách pase XML hoặc google…

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><WholesaleStatisticResponse xmlns="http://tempuri.org/"><WholesaleStatisticResult><newsubs>0</newsubs><deactivated>0</deactivated><portfolio>20</portfolio></WholesaleStatisticResult></WholesaleStatisticResponse></soap:Body></soap:Envelope>'

Một số link tham khảo thêm:

https://medium.com/@adriennedomingus/using-zeep-to-make-soap-requests-in-python-c575ea0ee954

https://www.geeksforgeeks.org/get-post-requests-using-python/

https://viblo.asia/p/xay-dung-mot-restful-api-don-gian-voi-python-va-flask-bJzKmMvDK9N

http://hoctuduylaptrinh.com/category/lap-trinh/lap-trinh-python/

Cài đặt máy ảo để lấy môi trường để “vọc” thứ mới

Máy ảo có nhiều tác dụng mà mình đang sử dụng như sau:

  • Check các file cần giải nén nghi ngờ có virut ở trong như các file crack
  • Tạo môi trường linux để thử nghiệm các lệnh linux, lập trình trên linux
  • Tạo môi trường server để tập build app, public trên các môi trường khác như Windowserver, Linux server..
  • Tự học các thứ mới như các hệ thống HA, Database Oracle, Apex…

Để cài máy ảo trên window và linux hiện mình biết có 2 phần mềm là Virtualbox và Vmware workstation.
Trong đó máy chính của mình là Window nên mình hay dùng với Vmware workstation, trước đây cũng dùng Virtualbox nhưng về sau lại thôi.
Để cài Vmware workstation thì đơn giản, google cái ra rất nhiều. Nhưng nếu muốn cài máy ảo 64 bit thì phải vào BIOS bật tính năng VT(x) lên (google nhé: BIOS cài máy ảo 64 bit).

Để đỡ phải cài máy ảo nhiều lần, khi ta cài xong 1 máy thì có thể nhân bản để lưu trữ lại. Vmware workstation cho phép ta nhân bản với 2 tính năng:

  • Clone: chép nguyên 1 bản máy ảo lại, mình thích dùng cách này, cách này cho ta 1 bản mới nguyên.
  • Snapshot: Sao lưu lại trạng thái của máy ở 1 thời điểm nào đó, cách này cho phép ta restore máy về 1 trạng thái nào trước đó.

Chiến lược của mình là cài xong 1 máy ảo, tiến hành clone ra 1 bản để sử dụng. Khi nào muốn dùng bản mới ở trạng thái ban đầu thì lại clone từ bản gốc để sử dụng.
Đối với mỗi bản đang dùng, trước khi làm 1 thao tác gì hoặc cài đặt, cấu hình cái gì thì tiến hành snapshot lại để có thể dễ dàng trở lại trạng thái trước đó.

Học và ứng dụng DATA SCIENTIST, AI, MACHINE LEARNER với KAGGLE

KAGGLE: học tập và áp dụng kiến thức vào các Project về DATA SCIENTIST, AI, MACHINE LEARNER

Kaggle là nơi để những người nghiên cứu về data science có thể chia sẻ kiến thức, dữ liệu và những người mới nghiên cứu về machine learning có thể học tập, tìm kiếm tài liệu, tham gia các cuộc thi và áp dụng các kiến thức này vào các project thực tế.

Máy có thể vẽ bằng bút theo một định dạng cho trước với AxiDraw

Trong quá trình làm luận văn về sử dụng sóng não để điều khiển thiết bị thông qua Emotiv. Thầy Vĩnh có đưa ra ý tưởng vẽ lại một bức ảnh gì đó đã được nhìn thấy trong quá khứ. Ý thầy sử dụng Emotive là thiết bị đọc sóng não kết hợp với thiết bị vẽ AxiDraw.

Ý tưởng này để hậu xét nhưng thấy thằng AxiDraw cũng khá hay ho. Là một thiết bị ứng dụng IOT mà điển hình là Adruino.

The AxiDraw V3 Drawing machine by Evil Mad Scientist. AxiDraw.com

Sử dụng Arduino điều khiển xe mô hình

Mình làm luận văn thạc sĩ Hệ thống thông tin về: Xây dựng hệ thống điều khiển thiết bị bằng thiết bị Epoc Emotiv trong đó có 1 phần trong thực hành đó là dùng Arduino điều khiển xe mô hình.

Cụ thể máy tính sẽ thực hiện phát lệnh tiến lui, rẽ phải trái tới xe mô hình thông qua thiết bị Arduino.

Thiết bị mình sử dụng:

– Bo mạch Arduino hoặc là Wemos R1
– Module cầu H điều khiển 2 motor L298N
– Motor động cơ giảm tốc DC

Trong quá trình mình triển khai thì mình không tài nào có thể điều khiển được motor quay theo chiều ngược lại. Ban đầu mình đấu có phần sai nhưng đó không phải là tất cả. Đấu sai nhưng vẫn quay được motor nhưng chỉ quay 1 chiều duy nhất.

Sau đó lỗi xác định có thể do việc cắm dây không đúng. Trong quá trình hỏi ở các nhóm trên Facebook và nơi bán mạch cầu H thì mình đã khắc phục được và mọi người khẳng định có thể chạy được.

Nhưng thực sự nó vẫn không chạy được như ý muốn, nó vẫn chỉ quay 1 chiều duy nhất.
Cuối cùng buộc phải mang đến quán bán cái mạch cầu H để nhờ họ xem, xem đi xem lại mãi mới phát hiện ra là do sợi dây đực cái bị đứt ngầm. Chỉ một sợi dây đứt ngầm mà dự án bị chậm mấy tháng. Nó làm mình mất ăn mất ngủ bao nhiêu hôm, không bao giờ nghĩ được ra là do sợi dây.

Cuối cùng vấn đề đã được giải quyết, mặc dù chưa cho chạy được nhưng mấu chốt đã được giải quyết, điều khiển được motor quay ngược quay xuôi thì sẽ làm được tiếp theo.

– Cách đấu mạch

+ Hai pin Ultrafire mỗi pin 3.7V, cực dương đấu vào chân 12V của mạch cầu H, cực âm đấu vào chân GND của mạch cầu H

+ Chân +5V và chân GND của mạch cầu H đấu sang cấp nguồn cho Arduino

+ 4 đường IN 1,2,3,4 của mạch cầu H nối với cổng ra 6,7,8,9 của Arduino(có thể 3,4,5,6…)

+ 4 đường OUT của mạch cầu H nối ra các cực của 2 động cơ tương ứng

– Code test

+ Quay xuôi

void setup()
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop()
{
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
delay(10000);//dừng 10s
}

+ Quay ngược

void setup()
{
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop()
{
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(10000);//dừng 10s
}

 

Rất cám ơn sự hỗ trợ từ cộng đồng IOT cũng như nơi bán sản phẩm linhkietviet.vn. Thực sự mình cũng chịu khó tìm tòi chứ không phải động tí là hỏi, nhưng thực sự ca này là ca thực sự khó đỡ nhất và là bài học kinh nghiệm đáng giá. Các bạn đã hỗ trợ mình hết sức nhiệt tình, từ đây mình có thêm niềm tiên và cố gắng hỗ trợ ngược lại người khác nếu có thể.

Lưu trữ và backup sự thay đổi của các package của hệ thống ORACLE (hoặc procedure, function…)

Lưu trữ và backup sự thay đổi của các package của hệ thống ORACLE (hoặc procedure, function…)

Đứng vai trò là một Delevlop Database, trong Database công ty sẽ có rất nhiều các pakage, các package này cũng không chỉ có mỗi một mình sửa mà cả team cùng sửa. Cũng giống như code, việc này hay xảy ra conflic khi build gây lỗi cả hệ thống.

Hoặc đơn giản hơn, trước khi sửa ta luôn phải lưu package lại trước khi sửa. Vì nhiều lúc không phải lúc nào cũng có hệ thống test để có thể làm việc được.

Để tự động hóa việc lưu trữ cũng như lưu được lịch sử sửa đổi package, mình sẽ thực hiện 1 tiến trình như sau:
– Bước 1: hàng ngày hoặc nửa ngày 1 lần, tiến hành extract từng package ra 1 file sql hoặc text để tiến hành lưu trữ
– Bước 2: Hoặc là lưu trữ toàn bộ lại theo từng lần. Hoặc tiến hành đưa vào source quản lý mã nguồn.
Từ đây ta có thể dễ dàng tra cứu lại hoặc tiến hành khôi phục lại (rollback) code sql mà ta có thể đã làm lỗi gì đó.

Đây là 1 procedure mà mình đã tạo:
– Lấy toàn bộ các package có tên bắt đầu P_VN để tiến hành backup
– Lấy mã nguồn từng package lưu vào file có tên là tên package và lưu trữ vào thư mục: EXTRACT_2018 (tên biến trong oracle maps vào ổ cứng, mình đã có 1 bài viết về cái này, bạn có thể xem tại: …)

CREATE OR REPLACE PROCEDURE pro_flat_export
IS
l_clob CLOB;
l_name VARCHAR2(300);
rc sys_refcursor;
l_buffer VARCHAR2 (32767);
l_amount BINARY_INTEGER := 32767;
l_pos INTEGER := 1;
wquery varchar2(3000);
col1 varchar2(500);
cursor c_getdata is
SELECT OBJECT_NAME FROM ALL_OBJECTS WHERE OBJECT_TYPE IN (‘PACKAGE’) and OBJECT_NAME like ‘P_VN%’;
BEGIN
for i_getdata in c_getdata loop
col1:=i_getdata.OBJECT_NAME;
select dbms_metadata.get_ddl(‘PACKAGE’,col1,USER) into l_clob from dual;
DBMS_XSLPROCESSOR.clob2file (l_clob, ‘EXTRACT_2018′, col1||’.sql’);
end loop;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END;

Ta có thể chạy định kỳ thủ tục này hoặc cần thì chạy:
begin
pro_flat_export();
end;

Ý tưởng để quản lý mã nguồn giống như quản lý mã nguồn cho code lập trình, ta sử dụng SVN hoặc GIT.
Ta tạo GIT bình thường, khi chạy tạo ra các file mới này ta đẩy vào thư mục GIT để thay thế code cũ. Sau đó tiến hành commit lên thôi, vì đây ta lưu ra txt hoặc sql nên có xem lại được theo version.