Dataset là tập các dữ liệu là ảnh phục vụ cho việc học sâu. Chúng ta không thể thu thập ảnh thủ công trong thời gian ngắn được. Với cách hướng dẫn sau đây hỗ trợ bạn thu thập Dataset trong thời gian ngắn dễ dàng hơn.
Cách tạo tập dữ liệu học sâu sử dụng Google image. Áp dụng cho trình duyệt Chrome: Chúng ta viết chương trình java script thu thập link download ảnh lưu vào file text. Sau đó tiến hành download và kiểm tra ảnh bằng chương trình viết bằng python.
Bước 1 : mở Chrome , tìm kiếm hình ảnh, gõ nội dung tìm kiếm , kéo chuột tới phía dưới hết trang, bấm vào nút hiển thị thêm kết quả:
cho tới khi không còn kết quả tìm kiếm:
Bước 2: Tiếp theo mở tab trong Chrome : view –> Developer –>JavaScript Console
nhập 5 đoạn code java script, nhâp lần lượt vào java script sau:
Đoạn 1 : Mô phỏng bấm chuột phải , nhấc nhả chuột, giữ cho không điều hướng truy cập trang khác
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 |
<span style="color: #993300;"><strong>//Mô phỏng bấm chuột phải , nhấc nhả chuột, giữ cho không điều hướng truy cập trang khác</strong></span> <span style="color: #993300;"><strong>function simulateRightClick( element ) {</strong></span> <span style="color: #993300;"><strong> var event1 = new MouseEvent( 'mousedown', {</strong></span> <span style="color: #993300;"><strong> bubbles: true,</strong></span> <span style="color: #993300;"><strong> cancelable: false,</strong></span> <span style="color: #993300;"><strong> view: window,</strong></span> <span style="color: #993300;"><strong> button: 2,</strong></span> <span style="color: #993300;"><strong> buttons: 2,</strong></span> <span style="color: #993300;"><strong> clientX: element.getBoundingClientRect().x,</strong></span> <span style="color: #993300;"><strong> clientY: element.getBoundingClientRect().y</strong></span> <span style="color: #993300;"><strong> } );</strong></span> <span style="color: #993300;"><strong> element.dispatchEvent( event1 );</strong></span> <span style="color: #993300;"><strong> var event2 = new MouseEvent( 'mouseup', {</strong></span> <span style="color: #993300;"><strong> bubbles: true,</strong></span> <span style="color: #993300;"><strong> cancelable: false,</strong></span> <span style="color: #993300;"><strong> view: window,</strong></span> <span style="color: #993300;"><strong> button: 2,</strong></span> <span style="color: #993300;"><strong> buttons: 0,</strong></span> <span style="color: #993300;"><strong> clientX: element.getBoundingClientRect().x,</strong></span> <span style="color: #993300;"><strong> clientY: element.getBoundingClientRect().y</strong></span> <span style="color: #993300;"><strong> } );</strong></span> <span style="color: #993300;"><strong> element.dispatchEvent( event2 );</strong></span> <span style="color: #993300;"><strong> var event3 = new MouseEvent( 'contextmenu', {</strong></span> <span style="color: #993300;"><strong> bubbles: true,</strong></span> <span style="color: #993300;"><strong> cancelable: false,</strong></span> <span style="color: #993300;"><strong> view: window,</strong></span> <span style="color: #993300;"><strong> button: 2,</strong></span> <span style="color: #993300;"><strong> buttons: 0,</strong></span> <span style="color: #993300;"><strong> clientX: element.getBoundingClientRect().x,</strong></span> <span style="color: #993300;"><strong> clientY: element.getBoundingClientRect().y</strong></span> <span style="color: #993300;"><strong> } );</strong></span> <span style="color: #993300;"><strong> element.dispatchEvent( event3 );</strong></span> <span style="color: #993300;"><strong>}</strong></span> |
đoạn 2: Viết hàm trích xuất đường dẫn link ảnh và lưu trữ
1 2 3 4 5 6 7 8 9 10 11 |
<strong><span style="color: #993300;">//Viết hàm trích xuất đường dẫn link ảnh và lưu trữ</span></strong> <strong><span style="color: #993300;">function getURLParam( queryString, key ) {</span></strong> <strong><span style="color: #993300;"> var vars = queryString.replace( /^\?/, '' ).split( '&' );</span></strong> <strong><span style="color: #993300;"> for ( let i = 0; i < vars.length; i++ ) {</span></strong> <strong><span style="color: #993300;"> let pair = vars[ i ].split( '=' );</span></strong> <strong><span style="color: #993300;"> if ( pair[0] == key ) {</span></strong> <strong><span style="color: #993300;"> return pair[1];</span></strong> <strong><span style="color: #993300;"> }</span></strong> <strong><span style="color: #993300;"> }</span></strong> <strong><span style="color: #993300;"> return false;</span></strong> <strong><span style="color: #993300;">}</span></strong> |
đoạn 3: Lưu các url ảnh vào file text, sau đó phát sinh file text download tưj động về máy tính
1 2 3 4 5 6 7 8 |
<span style="color: #993300;"><strong>//Lưu các url ảnh vào file text, sau đó phát sinh file text download tưj động về máy tính</strong></span> <span style="color: #993300;"><strong>function createDownload( contents ) {</strong></span> <span style="color: #993300;"><strong> var hiddenElement = document.createElement( 'a' );</strong></span> <span style="color: #993300;"><strong> hiddenElement.href = 'data:attachment/text,' + encodeURI( contents );</strong></span> <span style="color: #993300;"><strong> hiddenElement.target = '_blank';</strong></span> <span style="color: #993300;"><strong> hiddenElement.download = 'urls.txt';</strong></span> <span style="color: #993300;"><strong> hiddenElement.click();</strong></span> <span style="color: #993300;"><strong>}</strong></span> |
đoạn 4: Tập hợp và sử dụng các hàm trên
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 |
<strong><span style="color: #993300;">//Tập hợp và sử dụng các hàm trên</span></strong> <strong><span style="color: #993300;">function grabUrls() {</span></strong> <strong><span style="color: #993300;"> var urls = [];</span></strong> <strong><span style="color: #993300;"> return new Promise( function( resolve, reject ) {</span></strong> <strong><span style="color: #993300;"> var count = document.querySelectorAll(</span></strong> <strong><span style="color: #993300;"> '.isv-r a:first-of-type' ).length,</span></strong> <strong><span style="color: #993300;"> index = 0;</span></strong> <strong><span style="color: #993300;"> Array.prototype.forEach.call( document.querySelectorAll(</span></strong> <strong><span style="color: #993300;"> '.isv-r a:first-of-type' ), function( element ) {</span></strong> <strong><span style="color: #993300;"> // using the right click menu Google will generate the</span></strong> <strong><span style="color: #993300;"> // full-size URL; won't work in Internet Explorer</span></strong> <strong><span style="color: #993300;"> // (http://pyimg.co/byukr)</span></strong> <strong><span style="color: #993300;"> simulateRightClick( element.querySelector( ':scope img' ) );</span></strong> <strong><span style="color: #993300;"> // Wait for it to appear on the <a> element</span></strong> <strong><span style="color: #993300;"> var interval = setInterval( function() {</span></strong> <strong><span style="color: #993300;"> if ( element.href.trim() !== '' ) {</span></strong> <strong><span style="color: #993300;"> clearInterval( interval );</span></strong> <strong><span style="color: #993300;"> // extract the full-size version of the image</span></strong> <strong><span style="color: #993300;"> let googleUrl = element.href.replace( /.*(\?)/, '$1' ),</span></strong> <strong><span style="color: #993300;"> fullImageUrl = decodeURIComponent(</span></strong> <strong><span style="color: #993300;"> getURLParam( googleUrl, 'imgurl' ) );</span></strong> <strong><span style="color: #993300;"> if ( fullImageUrl !== 'false' ) {</span></strong> <strong><span style="color: #993300;"> urls.push( fullImageUrl );</span></strong> <strong><span style="color: #993300;"> }</span></strong> <strong><span style="color: #993300;"> // sometimes the URL returns a "false" string and</span></strong> <strong><span style="color: #993300;"> // we still want to count those so our Promise</span></strong> <strong><span style="color: #993300;"> // resolves</span></strong> <strong><span style="color: #993300;"> index++;</span></strong> <strong><span style="color: #993300;"> if ( index == ( count - 1 ) ) {</span></strong> <strong><span style="color: #993300;"> resolve( urls );</span></strong> <strong><span style="color: #993300;"> }</span></strong> <strong><span style="color: #993300;"> }</span></strong> <strong><span style="color: #993300;"> }, 10 );</span></strong> <strong><span style="color: #993300;"> } );</span></strong> <strong><span style="color: #993300;"> } );</span></strong> <strong><span style="color: #993300;">}</span></strong> |
đoạn 5: Gọi hàm chính , lấy các url và bắt đầu tải file text xuống
1 2 3 4 5 |
<strong><span style="color: #993300;">//Gọi hàm chính , lấy các url và bắt đầu tải file text xuống</span></strong> <strong><span style="color: #993300;">grabUrls().then( function( urls ) {</span></strong> <strong><span style="color: #993300;"> urls = urls.join( '\n' );</span></strong> <strong><span style="color: #993300;"> createDownload( urls );</span></strong> <strong><span style="color: #993300;">} );</span></strong> |
sau khi download file urls.txt tiến hành copy file text vào project python của bạn, sau đó tạo cây thư mục trong project như sau :
Bước 3 : Viết chương trình python tiến hành download ảnh.
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 |
<strong><span style="color: #993300;"># Thêm các thư viện cần thiết</span></strong> <strong><span style="color: #993300;">from imutils import paths</span></strong> <strong><span style="color: #993300;">import argparse</span></strong> <strong><span style="color: #993300;">import requests</span></strong> <strong><span style="color: #993300;">import cv2</span></strong> <strong><span style="color: #993300;">import os</span></strong> <strong><span style="color: #993300;"># đọc danh sách url và khởi tạo tiến hành download ảnh</span></strong> <strong><span style="color: #993300;">rows = open("urls.txt").read().strip().split("\n")</span></strong> <strong><span style="color: #993300;">total = 0</span></strong> <strong><span style="color: #993300;">for url in rows:</span></strong> <strong><span style="color: #993300;"> try:</span></strong> <strong><span style="color: #993300;"> # Tiến hành downlaod ảnh</span></strong> <strong><span style="color: #993300;"> r = requests.get(url, timeout=60)</span></strong> <strong><span style="color: #993300;"> # Lưu vào ổ đĩa</span></strong> <strong><span style="color: #993300;"> p = os.path.sep.join(["Dataset/Meo", "{}.jpg".format(</span></strong> <strong><span style="color: #993300;"> str(total).zfill(8))])</span></strong> <strong><span style="color: #993300;"> f = open(p, "wb")</span></strong> <strong><span style="color: #993300;"> f.write(r.content)</span></strong> <strong><span style="color: #993300;"> f.close()</span></strong> <strong><span style="color: #993300;"> # cập nhật biến đếm</span></strong> <strong><span style="color: #993300;"> print("[INFO] downloaded: {}".format(p))</span></strong> <strong><span style="color: #993300;"> total += 1</span></strong> <strong><span style="color: #993300;"> # bỏ qua nếu phát sinh trường hợp ngoại lệ</span></strong> <strong><span style="color: #993300;"> except:</span></strong> <strong><span style="color: #993300;"> print("[INFO] error downloading {}...skipping".format(p))</span></strong> <strong><span style="color: #993300;">for imagePath in paths.list_images("Dataset/Meo"):</span></strong> <strong><span style="color: #993300;"> # Khởi tạo danh sách ảnh lỗi sẽ xoá đi</span></strong> <strong><span style="color: #993300;"> delete = False</span></strong> <strong><span style="color: #993300;"> # cố gắng đọc hiển thị ảnh</span></strong> <strong><span style="color: #993300;"> try:</span></strong> <strong><span style="color: #993300;"> image = cv2.imread(imagePath)</span></strong> <strong><span style="color: #993300;"> # nếu ảnh rỗng tiến hành xoá file</span></strong> <strong><span style="color: #993300;"> if image is None:</span></strong> <strong><span style="color: #993300;"> delete = True</span></strong> <strong><span style="color: #993300;"> # if openCV không thể load file , chúng ta sẽ xoá file đó</span></strong> <strong><span style="color: #993300;"> except:</span></strong> <strong><span style="color: #993300;"> print("Except")</span></strong> <strong><span style="color: #993300;"> delete = True</span></strong> <strong><span style="color: #993300;"> # kiểm tra và tiến hành xoá</span></strong> <strong><span style="color: #993300;"> if delete:</span></strong> <strong><span style="color: #993300;"> print("[INFO] deleting {}".format(imagePath))</span></strong> <strong><span style="color: #993300;"> os.remove(imagePath)</span></strong> |
Chạy file python và hưởng thụ thành quả, thay đổi đường dẫn với các đối tượng bạn muốn download về. Chúc các bạn thành công.