MATLAB Answers

Not able to call python script from matlab using py command

43 views (last 30 days)
baibhav kumar
baibhav kumar on 10 Jul 2019
Answered: Shrinidhi KR on 8 May 2020
I downloaded the Add - on How to call Python Library function in Matlab.
I also downloaded python version 3.6. When I am using the command pyversion, it is showing correctly that version of python is 3.6.
But when I am trying to call the python code in matlab , it is giving an error - Undefined variable "py" or class "py.call_new1.view_img".
Here is my python code stored in file call_new1.py which is working fine in python editor . What my code does is that it is taking random shapes from the folder E:/baibhav/MPEG7dataset/Distinct_images. Afterwards it is filling a random colour inside that shape from colour_list.After that it is also superimposing a random alphabet from string.ascii_letters on the above obtained image.
import os,random
import string
from PIL import Image,ImageDraw, ImageFont
def random_string_generator(str_size, allowed_chars):
return ''.join(random.choice(allowed_chars) for x in range(str_size))
def view_img(str):
print(str)
for i in range(1, 10):
folder1=r"E:/baibhav/MPEG7dataset/Distinct_images"
a=random.choice(os.listdir(folder1))
print(a)
file1 = folder1+'\\'+a
img1 = Image.open(file1).convert("RGBA")
#img1.show()
width, height = img1.size
center = (int(0.5 * width), int(0.5 * height))
#yellow = (100, 100, 0, 255)
colour_list = ((255,0,0,255),(0,255,0,255),(0,0,255,255),(210,105,30,255),(255, 255, 0, 255),(0,255,255,255),(128,128,128,255),(255,0,255,255),(100, 100, 0, 255),(100,0,255,255),(0,100,100,255))
#col = random.choice(colour_list)
ImageDraw.floodfill(img1, xy=center, value=random.choice(colour_list))
#img3.load()
#img2 = img1;
#img1.show()
chars = string.ascii_letters
size = 1
print(chars)
print('Random alphabet is', random_string_generator(size, chars))
# initialise the drawing context with
# the image object as background
draw = ImageDraw.Draw(img1)
font = ImageFont.truetype('Roboto-Bold.ttf', size=100)
(x, y) = (150, 150)
name = random_string_generator(size, chars)
color = 'rgb(255, 255, 255)' # white color
draw.text((x, y), name, fill=color, font=font)
# save the edited image
#img1.show()
img1.save("H:/superimpose/filename"+str(i)+".png", 'PNG')
Here is how I am calling the same code in matlab command window :-
py.call_new1.view_img('hello')
But it is giving me following error:
Undefined variable "py" or class "py.call_new1.view_img".
Please help me with this.Thanks in Advance.

  0 Comments

Sign in to comment.

Answers (2)

Jalaj Gambhir
Jalaj Gambhir on 19 Jul 2019
Edited: Jalaj Gambhir on 19 Jul 2019
Hi,
This is a common error that occurs when python is not able to locate your script. You can add the path of your file to the python searchable directories as:
  1. In the MATLAB command window check whether the path to your folder containing the file exists. It should be not. To do so, execute
P = py.sys.path
2. For your case, execute the following, to add the path of your folder in python searchable directories:
if count(P,'E:/baibhav/MPEG7dataset/Distinct_images') == 0
insert(P,int32(0), 'E:/baibhav/MPEG7dataset/Distinct_images');
end
3. Execute
py.sys.path
to check the output again. If the path is added to the list, execute the following for the desired result.
py.call_new1.view_img

  0 Comments

Sign in to comment.


Shrinidhi KR
Shrinidhi KR on 8 May 2020
Verify all of the points mentioned in this link, either one of these should be causing the issue.

  0 Comments

Sign in to comment.

Products


Release

R2017b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by