#!/usr/bin/env python3 # -*- coding: utf-8 -*- # */AIPND-revision/intropyproject-classify-pet-images/adjust_results4_isadog_hints.py # # PROGRAMMER: # DATE CREATED: # REVISED DATE: # PURPOSE: This is a *hints* file to help guide students in creating the # function adjust_results4_isadog that adjusts the results dictionary # to indicate whether or not the pet image label is of-a-dog, # and to indicate whether or not the classifier image label is of-a-dog. # All dog labels from both the pet images and the classifier function # will be found in the dognames.txt file. We recommend reading all the # dog names in dognames.txt into a dictionary where the 'key' is the # dog name (from dognames.txt) and the 'value' is one. If a label is # found to exist within this dictionary of dog names then the label # is of-a-dog, otherwise the label isn't of a dog. Alternatively one # could also read all the dog names into a list and then if the label # is found to exist within this list - the label is of-a-dog, otherwise # the label isn't of a dog. # This function inputs: # -The results dictionary as results_dic within adjust_results4_isadog # function and results for the function call within main. # -The text file with dog names as dogfile within adjust_results4_isadog # function and in_arg.dogfile for the function call within main. # This function uses the extend function to add items to the list # that's the 'value' of the results dictionary. You will be adding the # whether or not the pet image label is of-a-dog as the item at index # 3 of the list and whether or not the classifier label is of-a-dog as # the item at index 4 of the list. Note we recommend setting the values # at indices 3 & 4 to 1 when the label is of-a-dog and to 0 when the # label isn't a dog. # ## # TODO 4: EDIT and ADD code BELOW to do the following that's stated in the # comments below that start with "TODO: 4" for the adjust_results4_isadog # function. Specifically EDIT and ADD code to define the # adjust_results4_isadog function. Notice that this function doesn't return # anything because the results_dic dictionary that is passed into the # function is a mutable data type so no return is needed. # def adjust_results4_isadog(results_dic, dogfile): """ Adjusts the results dictionary to determine if classifier correctly classified images 'as a dog' or 'not a dog' especially when not a match. Demonstrates if model architecture correctly classifies dog images even if it gets dog breed wrong (not a match). Parameters: results_dic - Dictionary with 'key' as image filename and 'value' as a List. Where the list will contain the following items: index 0 = pet image label (string) index 1 = classifier label (string) index 2 = 1/0 (int) where 1 = match between pet image and classifer labels and 0 = no match between labels ------ where index 3 & index 4 are added by this function ----- NEW - index 3 = 1/0 (int) where 1 = pet image 'is-a' dog and 0 = pet Image 'is-NOT-a' dog. NEW - index 4 = 1/0 (int) where 1 = Classifier classifies image 'as-a' dog and 0 = Classifier classifies image 'as-NOT-a' dog. dogfile - A text file that contains names of all dogs from the classifier function and dog names from the pet image files. This file has one dog name per line dog names are all in lowercase with spaces separating the distinct words of the dog name. Dog names from the classifier function can be a string of dog names separated by commas when a particular breed of dog has multiple dog names associated with that breed (ex. maltese dog, maltese terrier, maltese) (string - indicates text file's filename) Returns: None - results_dic is mutable data type so no return needed. """ # Creates dognames dictionary for quick matching to results_dic labels from # real answer & classifier's answer dognames_dic = dict() # Reads in dognames from file, 1 name per line & automatically closes file with open(dogfile, "r") as infile: # Reads in dognames from first line in file line = infile.readline() # Processes each line in file until reaching EOF (end-of-file) by # processing line and adding dognames to dognames_dic with while loop while line != "": # TODO: 4a. REPLACE pass with CODE to remove the newline character # from the variable line # # Process line by striping newline from line pass # TODO: 4b. REPLACE pass with CODE to check if the dogname(line) # exists within dognames_dic, then if the dogname(line) # doesn't exist within dognames_dic then add the dogname(line) # to dognames_dic as the 'key' with the 'value' of 1. # # adds dogname(line) to dogsnames_dic if it doesn't already exist # in the dogsnames_dic dictionary pass # Reads in next line in file to be processed with while loop # if this line isn't empty (EOF) line = infile.readline() # Add to whether pet labels & classifier labels are dogs by appending # two items to end of value(List) in results_dic. # List Index 3 = whether(1) or not(0) Pet Image Label is a dog AND # List Index 4 = whether(1) or not(0) Classifier Label is a dog # How - iterate through results_dic if labels are found in dognames_dic # then label "is a dog" index3/4=1 otherwise index3/4=0 "not a dog" for key in results_dic: # Pet Image Label IS of Dog (e.g. found in dognames_dic) if results_dic[key][0] in dognames_dic: # Classifier Label IS image of Dog (e.g. found in dognames_dic) # appends (1, 1) because both labels are dogs if results_dic[key][1] in dognames_dic: results_dic[key].extend((1, 1)) # TODO: 4c. REPLACE pass BELOW with CODE that adds the following to # results_dic dictionary for the key indicated by the # variable key - append (1,0) to the value using # the extend list function. This indicates # the pet label is-a-dog, classifier label is-NOT-a-dog. # # Classifier Label IS NOT image of dog (e.g. NOT in dognames_dic) # appends (1,0) because only pet label is a dog else: pass # Pet Image Label IS NOT a Dog image (e.g. NOT found in dognames_dic) else: # TODO: 4d. REPLACE pass BELOW with CODE that adds the following to # results_dic dictionary for the key indicated by the # variable key - append (0,1) to the value uisng # the extend list function. This indicates # the pet label is-NOT-a-dog, classifier label is-a-dog. # # Classifier Label IS image of Dog (e.g. found in dognames_dic) # appends (0, 1)because only Classifier labe is a dog if results_dic[key][1] in dognames_dic: pass # TODO: 4e. REPLACE pass BELOW with CODE that adds the following to # results_dic dictionary for the key indicated by the # variable key - append (0,0) to the value using the # extend list function. This indicates # the pet label is-NOT-a-dog, classifier label is-NOT-a-dog. # # Classifier Label IS NOT image of Dog (e.g. NOT in dognames_dic) # appends (0, 0) because both labels aren't dogs else: pass