I am working on app where react-native as a frontend and django-rest-framework as a backend. From frontend I am sending Image using formdata in backend. But I am getting this error Can't convert object to 'str' for 'filename'.
frontend code
const estPrice = async () => {
const formData = new FormData();
console.log(Page1)
formData.append("book_page1", {
name: "page1.jpg",
uri: Page1,
type: "image/jpg",
});
formData.append("book_page2", {
name: "page2.jpg",
uri: Page2,
type: "image/jpg",
});
formData.append("book_page3", {
name: "page3.jpg",
uri: Page3,
type: "image/jpg",
});
try {
const result = await authAxios.post("/sell/estprice", formData);
console.log(result)
} catch (error) {
console.log(error);
}
};
backend code
class BookEstimatedPriceView(GenericAPIView):
def post(self, request):
data = request.data
print(data)
img1 = data.get('book_page1', '');
img2 = data.get('book_page2', '');
img3 = data.get('book_page3', '');
print(img1)
def rgb_to_hex(rgb_color):
hex_color = "#"
for i in rgb_color:
i = int(i)
hex_color += ("{:02x}".format(i))
return hex_color
# img1 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo1.jpg'
# img2 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo2.jpg'
# img3 = 'C:/Users/Aditya Pandit/Desktop/Image/Aditya@123/photo3.jpg'
img1 = cv2.imread(img1)
img2 = cv2.imread(img2)
img3 = cv2.imread(img3)
img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
img3 = cv2.cvtColor(img3, cv2.COLOR_BGR2GRAY)
n_clusters = 1
list_hex = []
img_list = [img1, img2, img3]
for item in img_list:
kmeans = KMeans(n_clusters)
kmeans.fit(item)
colors = kmeans.cluster_centers_
labels = kmeans.labels_
label_count = [0 for i in range(n_clusters)]
for ele in labels:
label_count[ele] += 1
index_color = label_count.index(max(label_count))
dict_colour_percen = {}
print
for index, ele in enumerate(label_count):
#print(str(ele)+' labels with pixel value -> '),
hex_color = rgb_to_hex(colors[index])
#print(hex_color,)
list_hex.append(hex_color)
color_percen = float(ele)/len(labels)*100
print('Percentage ->'+str(color_percen))
dict_colour_percen[hex_color] = color_percen
print()
plt.show()
print()
list_first_index = []
for items in list_hex:
list_first_index.append(items[1:2])
print(list_first_index)
price = 200
estimated_price = 0
list_per = []
for items in list_first_index:
#for color in list_color_palette:
if(items=='0' or items=='1'):
list_per.append(20)
if(items=='2'):
list_per.append(26.3)
if(items=='3'):
list_per.append(32.6)
if(items=='4'):
list_per.append(38.9)
if(items=='5'):
list_per.append(45.2)
if(items=='6'):
list_per.append(51.5)
if(items=='7'):
list_per.append(57.8)
if(items=='8'):
list_per.append(64.1)
if(items=='9'):
list_per.append(70.4)
if(items=='a'):
list_per.append(76.7)
if(items=='b'):
list_per.append(83)
if(items=='c'):
list_per.append(89.3)
if(items=='d'):
list_per.append(90)
if(items=='e'):
list_per.append(90)
if(items=='f'):
list_per.append(90)
print(list_per)
sum = 0
for item in list_per:
sum+=item
avg_per=sum/len(list_per)
print(avg_per)
estimated_price = price*(avg_per/100)
print(estimated_price)
data = {
'est_price': estimated_price
}
return Response(data, status=status.HTTP_200_OK);
error
Internal Server Error: /api/sell/estprice
Traceback (most recent call last):
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\views\decorators\csrf.py", line 56, in wrapper_view
return view_func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\django\views\generic\base.py", line 104, in view
return self.dispatch(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 509, in dispatch
response = self.handle_exception(exc)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 469, in handle_exception
self.raise_uncaught_exception(exc)
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 480, in raise_uncaught_exception
raise exc
File "C:\Users\Aditya Pandit\.virtualenvs\bookmart-ySyK5Yky\Lib\site-packages\rest_framework\views.py", line 506, in dispatch
response = handler(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Aditya Pandit\Desktop\bookmart\bookmart\sell\views.py", line 70, in post
img1 = cv2.imread(img1)
^^^^^^^^^^^^^^^^
TypeError: Can't convert object to 'str' for 'filename'
I am expecting to get image from frontend, process in the backend and get Response. For absolute path the api is working fine. But, for image from frontend it is giving error.
You need to use
request.FILES.get('img*').file