Lấy hình ảnh từ url Python

Trong tháng qua, tôi đã nhận được một số độc giả của PyImageSearch gửi email và hỏi cách tải xuống một hình ảnh từ một URL, sau đó chuyển đổi nó sang định dạng OpenCV (không ghi nó vào đĩa và sau đó đọc lại) — và trong bài viết này, tôi

Và như một phần thưởng, chúng ta cũng sẽ xem cách chúng ta có thể sử dụng scikit-image để tải xuống một hình ảnh từ một URL, cùng với một "gotcha" phổ biến có thể khiến bạn gặp khó khăn trong quá trình thực hiện

Tiếp tục đọc để tìm hiểu cách chuyển đổi URL thành hình ảnh bằng Python và OpenCV

Lấy hình ảnh từ url Python

Tìm kiếm mã nguồn cho bài viết này?

Jump Right To The Downloads Section

Phiên bản OpenCV và Python.
Để chạy ví dụ này, bạn cần có Python 2. 7 và OpenCV 2. 4. X.

Phương pháp số 1. OpenCV, NumPy và urllib

Phương pháp đầu tiên chúng ta sẽ khám phá là chuyển đổi URL thành hình ảnh bằng thư viện OpenCV, NumPy và urllib. Mở một tệp mới, đặt tên là

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
0 và bắt đầu

# import the necessary packages
import numpy as np
import urllib
import cv2

# METHOD #1: OpenCV, NumPy, and urllib
def url_to_image(url):
	# download the image, convert it to a NumPy array, and then read
	# it into OpenCV format
	resp = urllib.urlopen(url)
	image = np.asarray(bytearray(resp.read()), dtype="uint8")
	image = cv2.imdecode(image, cv2.IMREAD_COLOR)

	# return the image
	return image

Điều đầu tiên chúng tôi sẽ làm là các gói quan trọng hoặc cần thiết. Chúng tôi sẽ sử dụng NumPy để chuyển đổi chuỗi byte từ bản tải xuống thành mảng NumPy,

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
1 để thực hiện yêu cầu thực tế và
# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
2 cho các ràng buộc OpenCV của chúng tôi

Sau đó, chúng tôi xác định chức năng

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
3 của mình trên Dòng 7. Hàm này yêu cầu một đối số duy nhất,
# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
4 , là URL của hình ảnh chúng tôi muốn tải xuống

Tiếp theo, chúng tôi sử dụng thư viện

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
1 để mở kết nối tới URL được cung cấp trên Dòng 10. Chuỗi byte thô từ yêu cầu sau đó được chuyển đổi thành mảng NumPy trên Dòng 11

Lúc này mảng NumPy là mảng 1 chiều (i. e. một danh sách dài các pixel). Để định hình lại mảng thành định dạng 2D, giả sử 3 thành phần trên mỗi pixel (i. e. các thành phần Red, Green và Blue tương ứng), chúng tôi thực hiện cuộc gọi tới

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
0 trên Dòng 12. Cuối cùng, chúng tôi trả lại hình ảnh đã giải mã cho chức năng gọi trên Dòng 15

Được rồi, đã đến lúc để chức năng này hoạt động

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)

Dòng 18-21 xác định danh sách các URL hình ảnh mà chúng tôi sẽ tải xuống và chuyển đổi sang định dạng OpenCV

Chúng tôi bắt đầu lặp qua từng URL này trên Dòng 25, gọi hàm

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
3 của chúng tôi trên Dòng 28 và cuối cùng hiển thị hình ảnh đã tải xuống của chúng tôi trên màn hình của chúng tôi trên Dòng 29 và 30. Tại thời điểm này, hình ảnh của chúng tôi có thể được thao tác với bất kỳ chức năng OpenCV nào khác như bình thường

Để xem công việc của chúng tôi đang hoạt động, hãy mở một thiết bị đầu cuối và thực hiện lệnh sau

$ python url_to_image.py

Nếu mọi việc suôn sẻ, trước tiên bạn sẽ thấy logo OpenCV

Lấy hình ảnh từ url Python
Hình 1. Tải xuống logo OpenCV từ một URL và chuyển đổi nó sang định dạng OpenCV

Và tiếp theo là logo của Google

Lấy hình ảnh từ url Python
Hình 2. Tải xuống logo Google từ một URL và chuyển đổi nó sang định dạng OpenCV

Và đây là một ví dụ về việc tôi minh họa tính năng nhận diện khuôn mặt trong cuốn sách của tôi, Thực hành Python và OpenCV

Lấy hình ảnh từ url Python
Hình 3. Chuyển đổi URL hình ảnh sang định dạng OpenCV bằng Python

Bây giờ, hãy chuyển sang phương pháp thay thế để tải xuống một hình ảnh và chuyển đổi nó sang định dạng OpenCV

Phương pháp #2. hình ảnh scikit

Phương pháp thứ hai giả định rằng bạn đã cài đặt thư viện scikit-image trên hệ thống của mình. Hãy xem cách chúng ta có thể tận dụng scikit-image để tải xuống một hình ảnh từ một URL và chuyển đổi nó sang định dạng OpenCV

# METHOD #2: scikit-image
from skimage import io

# loop over the image URLs
for url in urls:
	# download the image using scikit-image
	print "downloading %s" % (url)
	image = io.imread(url)
	cv2.imshow("Incorrect", image)
	cv2.imshow("Correct", cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
	cv2.waitKey(0)

Một trong những khía cạnh hay của thư viện hình ảnh scikit là hàm

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
2  trong gói phụ
# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
3  có thể cho biết sự khác biệt giữa đường dẫn đến hình ảnh trên đĩa và URL (Dòng 39)

Tuy nhiên, có một vấn đề quan trọng thực sự có thể khiến bạn vấp ngã

OpenCV đại diện cho hình ảnh theo thứ tự BGR — trong khi scikit-image đại diện cho hình ảnh theo thứ tự RGB. Nếu bạn sử dụng chức năng scikit-image

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
2  và muốn sử dụng các chức năng OpenCV sau khi tải hình ảnh xuống, bạn cần đặc biệt cẩn thận để chuyển đổi hình ảnh từ RGB sang BGR (Dòng 41)

Nếu không thực hiện thêm bước này, bạn có thể nhận được kết quả không chính xác

Lấy hình ảnh từ url Python
hinh 4. Cần đặc biệt cẩn thận để chuyển đổi từ RGB sang BGR khi sử dụng scikit-image để chuyển đổi URL thành hình ảnh. Hình ảnh bên trái được chỉ định không chính xác theo thứ tự RGB. Hình ảnh bên phải hiển thị chính xác hình ảnh sau khi được chuyển đổi từ thứ tự RGB sang BGR

Hãy xem biểu trưng của Google bên dưới để làm cho điểm này rõ ràng hơn

Lấy hình ảnh từ url Python
Hình 5. Vấn đề đặt hàng. Đảm bảo chuyển đổi thứ tự từ RGB sang BGR nếu không bạn có thể đang theo dõi một lỗi khó tìm

Vì vậy, có bạn có nó. Hai phương pháp để chuyển đổi URL thành hình ảnh bằng Python, OpenCV, urllib và scikit-image

Cái gì tiếp theo?

Lấy hình ảnh từ url Python

Thông tin khóa học.
Tổng cộng hơn 60 lớp • Hơn 64 giờ video hướng dẫn mã theo yêu cầu • Cập nhật lần cuối. Tháng 12 năm 2022
★★★★★ 4. 84 (128 Xếp hạng) • Hơn 15.800 Học sinh Ghi danh

Tôi thực sự tin rằng nếu bạn có đúng giáo viên, bạn có thể thành thạo thị giác máy tính và học sâu

Bạn có nghĩ rằng việc học thị giác máy tính và học sâu tốn nhiều thời gian, quá sức và phức tạp không?

Đó không phải là trường hợp

Tất cả những gì bạn cần để thành thạo thị giác máy tính và học sâu là nhờ ai đó giải thích mọi thứ cho bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và cách dạy các chủ đề Trí tuệ nhân tạo phức tạp

Nếu bạn nghiêm túc về việc học thị giác máy tính, điểm dừng chân tiếp theo của bạn phải là Đại học PyImageSearch, khóa học trực tuyến về thị giác máy tính, học sâu và OpenCV toàn diện nhất hiện nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của mình. Tham gia cùng tôi trong việc làm chủ thị giác máy tính

Bên trong Đại học PyImageSearch, bạn sẽ tìm thấy

  • ✓ Hơn 60 khóa học về chủ đề thị giác máy tính thiết yếu, học sâu và OpenCV
  • ✓ Hơn 60 Chứng chỉ Hoàn thành
  • ✓ Hơn 64 giờ video theo yêu cầu
  • ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiến nhất
  • ✓ Máy tính xách tay Jupyter được định cấu hình sẵn trong Google Colab
  • ✓ Chạy tất cả các mẫu mã trong trình duyệt web của bạn — hoạt động trên Windows, macOS và Linux (không yêu cầu cấu hình môi trường nhà phát triển. )
  • ✓ Truy cập kho lưu trữ mã tập trung cho tất cả hơn 500 hướng dẫn trên PyImageSearch
  • ✓ Dễ dàng tải xuống bằng một cú nhấp chuột đối với mã, bộ dữ liệu, mô hình được đào tạo trước, v.v.
  • ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.

Nhấn vào đây để tham gia Đại học PyImageSearch

Tóm lược

Trong bài đăng trên blog này, chúng tôi đã tìm hiểu về hai phương pháp để tải xuống một hình ảnh từ một URL và chuyển đổi nó sang định dạng OpenCV bằng Python và OpenCV

Phương pháp đầu tiên là sử dụng gói

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
1  Python để tải xuống hình ảnh, chuyển đổi nó thành một mảng bằng NumPy và cuối cùng định hình lại mảng bằng OpenCV để xây dựng hình ảnh của chúng ta

Phương pháp thứ hai là sử dụng hàm

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
6  của scikit-image

Vậy phương pháp nào tốt hơn?

Tất cả phụ thuộc vào thiết lập của bạn

Nếu bạn đã cài đặt scikit-image, tôi sẽ sử dụng hàm

# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
6  (đừng quên chuyển đổi từ RGB sang BGR nếu bạn đang sử dụng các hàm OpenCV). Và nếu bạn chưa cài đặt scikit-image, tôi sẽ hướng dẫn chi tiết hàm
# initialize the list of image URLs to download
urls = [
	"https://pyimagesearch.com/wp-content/uploads/2015/01/opencv_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2015/01/google_logo.png",
	"https://pyimagesearch.com/wp-content/uploads/2014/12/adrian_face_detection_sidebar.png",
]

# loop over the image URLs
for url in urls:
	# download the image URL and display it
	print "downloading %s" % (url)
	image = url_to_image(url)
	cv2.imshow("Image", image)
	cv2.waitKey(0)
3 ở đầu bài viết này

Tôi cũng sẽ sớm thêm chức năng này vào gói imutils trên GitHub

Lấy hình ảnh từ url Python

Tải xuống Mã nguồn và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ

Nhập địa chỉ email của bạn dưới đây để có được một. zip của mã và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ về Thị giác máy tính, OpenCV và Học sâu. Bên trong, bạn sẽ tìm thấy các hướng dẫn, sách, khóa học và thư viện được chọn lọc thủ công của tôi để giúp bạn thành thạo CV và DL

Làm cách nào để trích xuất hình ảnh từ URL trong Python?

Bước 1. Phân tích nội dung HTML của trang web. yêu cầu nhập khẩu. .
Bước 2. Đi qua cây để tìm tất cả các thẻ 'img'. yêu cầu nhập khẩu. .
Bước 3. Trích xuất thuộc tính 'src' của mọi hình ảnh. Những gì chúng tôi muốn làm là trích xuất thuộc tính 'src' từ mỗi thẻ hình ảnh, đây sẽ là URL của hình ảnh
Bước 4. Lọc các liên kết hình ảnh định dạng PNG

Làm cách nào để lấy dữ liệu hình ảnh Python?

Quy trình trích xuất là. .
nhập mô-đun Hình ảnh của PIL vào trình bao. >>> từ hình ảnh nhập PIL
tạo một đối tượng hình ảnh và mở hình ảnh ở chế độ đọc. >>> im = Hình ảnh. mở ('tệp của tôi. png', 'r').
chúng tôi sử dụng một chức năng của mô-đun Hình ảnh được gọi là getdata () để trích xuất các giá trị pixel

Làm cách nào để đọc nội dung hình ảnh trong Python?

Thư viện Python . Tức là nó sẽ nhận dạng và “đọc” chữ nhúng trong hình ảnh. Python-tesseract là một trình bao bọc cho Công cụ Tesseract-OCR của Google. Python-tesseract is an optical character recognition (OCR) tool for python. That is, it will recognize and “read” the text embedded in images. Python-tesseract is a wrapper for Google's Tesseract-OCR Engine.