我尝试创建一个脚本,该脚本将刮擦公共图片共享网站上最新上传的文件,并使用imageai识别图片中的内容,然后将其移动到imageai称为最佳猜测的文件夹中。 该脚本可以运行,但是它确实很慢,大约一分钟后,它消耗了5GB的RAM,这使我的PC不稳定。
我是Python的新手,到目前为止,这是我的第二个项目,因此我只尝试了用stackoverflow帖子编写的一些内容。
import requests
from bs4 import BeautifulSoup
import re
import urllib3
import urllib
from urllib3 import ProxyManager, make_headers
from imageai.Prediction import ImagePrediction
import os
import shutil, os
execution_path = os.getcwd()
from PIL import Image
proxy = urllib3.ProxyManager('proxy')
def make_soup(url):
http = urllib3.PoolManager()
r = http.request("GET", url)
return BeautifulSoup(r.data,'lxml')
ip = 'proxy'
proxies = {
'http': ip,
'https': ip,
}
default="space"
filetype = []
i = 1
soup = make_soup("link")
for img in soup.find_all('img', {'src':re.compile('_tn.jpg')}):
os.chdir(default)
temp = img.get('src').replace("_tn","")
print(temp)
nametemp = img.get('alt').replace("png","jpg")
print(nametemp)
if str(nametemp) == 'None':
filename = str(i)
i = i+1
else:
filename = nametemp
imagefile = open(filename , "wb")
imagefile.write(requests.get(temp).content)
imagefile.close()
print( filename + " mentve")
if ".png" in filename:
try:
im = Image.open(filename +".png")
filetype = "png"
print("this is a png")
im.close()
except IOError:
print("png error")
if ".jpg" in filename:
try:
im=Image.open(filename)
print("this is a jpg")
filetype= "jpg"
im.close()
prediction = ImagePrediction()
prediction.setModelTypeAsResNet()
prediction.setModelPath(os.path.join(execution_path, "resnet50_weights_tf_dim_ordering_tf_kernels.h5"))
prediction.loadModel()
predictions, probabilities = prediction.predictImage(os.path.join(execution_path, filename ), result_count=1 )
for eachPrediction, eachProbability in zip(predictions, probabilities):
print(eachPrediction , " : " , eachProbability)
dir = str(predictions[0])
if not os.path.exists(dir):
os.makedirs(dir)
os.chdir(dir)
print(dir)
if not os.path.isfile(filename):
os.chdir(default)
shutil.move(filename , dir)
else:
print("file already exists")
except IOError:
print("jpg error")
if ".jpeg" in filename:
try:
im=Image.open(filename)
print("this is a jpeg")
filetype= "jpeg"
im.close()
except IOError:
print("jpeg error")
print(filetype)
由于我正在寻找有关我的代码可能存在问题的建议,因此我在上面提供了完整的建议。抱歉,如果它违反任何规则,我认为这是合乎逻辑的步骤。 我希望获得一些阅读材料方面的建议或一些想法,以便更好地了解Python如何处理RAM使用情况。
任何事情都值得赞赏,但请记住,这是我到目前为止的第二个项目。
谢谢。