【发布时间】:2021-05-17 03:47:29
【问题描述】:
我想从我使用 django 表单上传的图像中提取文本。 这是我的观点。py
from django.http.response import HttpResponseBadRequest
from django.shortcuts import render, redirect, reverse
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import PasswordChangeForm, UserCreationForm
from django.contrib.auth.decorators import login_required
from .forms import UploadFileForm, EditFileName
from .models import Image
import cv2
import pytesseract
@login_required
def home(request):
context = {}
if request.method == "POST":
print(request.user)
form = UploadFileForm(request.POST, request.FILES)
print(request.FILES)
if form.is_valid():
username = request.user
image_text = request.FILES["image"].name
image = form.cleaned_data.get("image")
image_path = "../media/storage" + str(image)
image_clone = cv2.imread(image_path)
image_clone = cv2.cvtColor(image_clone, cv2.COLOR_BGR2GRAY)
image_clone = cv2.threshold(
image_clone, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
image_clone = cv2.medianBlur(image_clone, 5)
OCRtext = pytesseract.image_to_string(image_clone)
obj = Image.objects.create(
username=username,
image_text=image_text,
image=image,
OCRtext=OCRtext
)
obj.save()
print(obj)
else:
form = UploadFileForm()
form2 = EditFileName()
context['form2'] = form2
context['form'] = form
context['data'] = Image.objects.all()
print(context)
return render(request, "registration/success.html", context)
def edit(request):
context = {}
if request.method == "POST":
print('--------------')
form2 = EditFileName(request.POST)
if form2.is_valid():
username = request.user
image_text = form2.cleaned_data.get("image_text")
obj = Image.objects.filter(id=request.POST['image_id']).update(
image_text=image_text
)
print('obj in form2', obj)
form2 = EditFileName()
context['form2'] = form2
form = UploadFileForm()
context['form'] = form
context['data'] = Image.objects.all()
print(context)
return redirect('/home/')
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('home')
else:
form = UserCreationForm()
return render(request, 'registration/register.html', {'form': form})
我收到此错误 -
File "/media/samarpan/DATA1/task/users/views.py", line 26, in home
image_clone = cv2.cvtColor(image_clone, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.5.2) /tmp/pip-req-build-eirhwqtr/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
django表单上传的图片存储在request.FILES。我需要获取图片路径。
我了解此错误是因为图像源在 image_path = "../media/storage" + str(image) 中不正确 - 解决方法是什么?
repo 链接 - https://github.com/smrpn/task/
【问题讨论】:
-
打印出
image_path。这是你所期望的吗?它是否为您提供所需图像的正确路径?
标签: python-3.x opencv django-views django-forms python-tesseract